ブルーブリッジカップ埋め込み汎用個人ノート2(必記)


//ADDC構成および換算
PB 0はADC 1に対応し、PB 0ピンはADC_に多重化できるIN8 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//イネーブルクロック信号RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//IO構成GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_Init(GPIOB, &GPIO_InitStructure);
.....//ADC構成
ADC_Cmd(ADC1, ENABLE);//修正をリセットしてから、修正をオンにします.//一つ注意しなければならないのは、ADCをキャリブレーションする前に、//ADCをADCにしなければならないことです.Cmd(ADC1, ENABLE);//そうしないと、キャリブレーションでプログラムが詰まってしまいます.ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1));
u16 Get_ADC(void){u 16 temp;ADC_RegularChannelConfig(ADC 1,ADC_Channel_8,1,ADC_SampleTime_13 Cycles 5);ADC_SoftwareStartConvCmd(ADC 1,ENABLE);////プログラムソフトウェアによりAD変換while(ADC_GetFlaagStatus(ADC 1,ADC_FLAG_EOC)==0);temp=ADC_GetConversionValue(ADC 1);ADC_SoftwareStartConvCmCmCmC(ADC);ADC_SoftwareStartConvCmCmCmCmC(ADC);ADC_SoftwareStartStarrd(ADC 1,ENABLE);return temp;}
ADC_Value=Get_ADC()*3.3/4096;//stm 32 f 103 rbt 6のADCは精度が12ビット(つまり0~4096)であるため、我々が読み出したAD値データは12ビットであり、通俗的には3.3 Vを4096部に分ける.sprintf((char *)adc_string,“GET ADC_Value:%.2fV”,ADC_Value); LCD_DisplayStringLine(Line4,adc_string);
//リアルタイムクロック
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);
RTC_SetPrescaler(39999); RTC_WaitForLastTask(); RTC_SetCounter(233600+5560+50); RTC_WaitForLastTask();
void RTC_IRQHandler(void)/RTC割り込み{if(RTC_GetITStatus(RTC_IT_SEC)!=RESET){RTC_ClearitPendingBit(RTC_IT_SEC);TimeDisplay=1;RTC_WaitForLastTask();
} } void Time_Display(uint 32_t TimeVar)/RTC表示時間{uint 32_t THH=0,TMM=0,TSS=0;if(RTC_GetCounter()==0 x 001517 F){RTC_SetCounter(0 x 0);RTC_WaitForLastTask();}
THH = TimeVar/3600; TMM = (TimeVar % 3600)/60; TSS = (TimeVar % 3600) % 60;
sprintf((char *)string2,“Time: %0.2d:%0.2d:%0.2d”, THH, TMM, TSS); LCD_DisplayStringLine(Line9,string2); } while(1) { if(TimeDisplay == 1) { Time_Display(RTC_GetCounter()); TimeDisplay = 0; } }
//シリアル通信
			 1(PA9,PA10), 2(PA2,PA3),
			PA2->TX ,PA3->RX 。
			 , 1,
			 1 , RS232 9 ,
			 , USB ,
			 。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//PA 2->TXは送信側GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA 3->RXは受信側GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);
void USART_SendString(uint 8_t*str)//シリアルポート送信データ{uint 8_t index=0;do{USART_SendData(USART 2,str[index]);while(USART_GetFlagStatus(USART 2,USART_FLAG_TC)==RESET);index+;}while(str[index] != 0);
}
void USART2_IRQHandler(void)/割込み、シリアルポート受信データ{uint 8_t temp;if(USART_GetITStatus(USART 2,USART_IT_RXNE)!=RESET){USART_CleartITPendingBit(USART 2,USART_IT_RXNE);//シリアルポート割込みtemp=USART_ReceiveData(USART 2);if(temp="x')|(RXCUNT==20){RXCUNT=0;RXOVER=1;RXER=1;//シリアルポート受信完了フラグビット}else{USART_RXBUF[RXCUNT]=temp;++RXCUNT;}
警告:ここではUSARTを使用しないでください.ITConfig(USART2, USART_IT_RXNE, DISABLE); そしてまたENABLE!私は自分で測ったことがあって、もしこのような結果があなたがシリアルポートが2回目の中断(1回目かもしれない)を受信した後に、プログラムはずっとシリアルポートの中断関数の中で飛び出せません!PS:それから、上の2行のコードをログアウトしてから、ダウンロードします.またログアウトをキャンセルして、意外にもできました!毒がある!
}
}
//割り込み//タイマーの2つなら言うまでもないでしょう.結局上の内容はそれらに関連しています~