嵌入式技術(shù)及應(yīng)用(STM32CubeMX版) 代碼 Task20Main_第1頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版) 代碼 Task20Main_第2頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版) 代碼 Task20Main_第3頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版) 代碼 Task20Main_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

在任務(wù)20中,main.c文件中所編寫用戶應(yīng)用程序如下,讀者只需將下列代碼按照程序編寫規(guī)范的要求添加至main.c文件的對應(yīng)位置處,就得到任務(wù)20的應(yīng)用程序。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153…#include "stdio.h"#include "string.h"#include "Serial.h"…const uint8_tComStr[3]={0x55,0xaa}; //命令頭const uint8_t ComStr1[5]={0x55,0xaa,0x01,0x5a};//命令1:顯示日期和時間…void RxDataProc(void);//接收數(shù)據(jù)處理函數(shù)說明…intmain(void){…HAL_UART_Receive_IT(&huart1,&aRxBuf,1); /*使能串口1接收中斷,并指定接收緩沖區(qū)和接收數(shù)據(jù)長度*/while(1){ if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET) /*判斷是否是空閑中斷(IDLE)發(fā)生*/ {/****************************************************************/ RxDataProc();//接收數(shù)據(jù)處理/****************************************************************/ memset(UserRxBuf,0,UserRxCnt);//串口接收緩沖區(qū)清0 UserRxCnt=0; //串口接收計數(shù)值清0 __HAL_UART_CLEAR_IDLEFLAG(&huart1); /*清除IDLE中斷請求標(biāo)志*/ }}}…/********************************************************************** RxDataProc()功能:串口接收數(shù)據(jù)處理參數(shù):無返回值:無***********************************************************************/void RxDataProc(void){ char * fp; RTC_TimeTypeDef iTime; //定義時間變量 RTC_DateTypeDef iDate; //定義日期變量 RTC_AlarmTypeDef iAlarm; //定義鬧鐘變量 if((strstr((constchar*)UserRxBuf,(constchar*)ComStr1))!=NULL) { //收到0x55aa015a 顯示日期和時間 HAL_RTC_GetTime(&hrtc,&iTime,RTC_FORMAT_BIN); //獲取當(dāng)前時間 HAL_RTC_GetDate(&hrtc,&iDate,RTC_FORMAT_BIN); //獲取當(dāng)前日期 printf("當(dāng)前日期:%d/%02d/%02d,",2000+iDate.Year, iDate.Month,iDate.Date); switch(iDate.WeekDay) //輸出星期 { case 0: printf("星期日\r\n"); break; case 1: printf("星期一\r\n"); break; case 2: printf("星期二\r\n"); break; case 3: printf("星期三\r\n"); break; case 4: printf("星期四\r\n"); break; case 5: printf("星期五\r\n"); break; case 6: printf("星期六\r\n"); break; } printf("當(dāng)前時間:%02d:%02d:%02d\r\n",iTime.Hours, iTime.Minutes,iTime.Seconds); return; } if((fp=strstr((constchar*)UserRxBuf,(constchar*)ComStr))!=NULL) { //收到0x55aa if(*(fp+6)==0x5a) //檢查是否收到了幀尾0x5a { //收到了幀尾0x5a switch(*(fp+2)) //判斷命令的類型 即命令的第3字節(jié) { case 2: //55AA02yymmdd5A設(shè)置日期 iDate.Year=*(fp+3); iDate.Month=*(fp+4); iDate.Date=*(fp+5); HAL_RTC_SetDate(&hrtc,&iDate,RTC_FORMAT_BCD); printf("設(shè)置日期是:%x/%02x/%02x\r\n", 0x2000+iDate.Year,iDate.Month,iDate.Date); break; case 3: //55AA03hhmmss5A設(shè)置時間 iTime.Hours=*(fp+3); //修改小時 iTime.Minutes=*(fp+4);//修改分 iTime.Seconds=*(fp+5);//修改秒 HAL_RTC_SetTime(&hrtc,&iTime,RTC_FORMAT_BCD); printf("設(shè)置時間是:%02x:%02x:%02x\r\n",iTime.Hours, iTime.Minutes,iTime.Seconds); break; case 4: //55AA04ahamas5A設(shè)置鬧時 iAlarm.Alarm=0; //設(shè)置鬧鐘ID號 iAlarm.AlarmTime.Hours=*(fp+3); //設(shè)置鬧鐘的小時 iAlarm.AlarmTime.Minutes=*(fp+4); //設(shè)置鬧鐘的分 iAlarm.AlarmTime.Seconds=*(fp+5); //設(shè)置鬧鐘的秒 /*設(shè)置鬧鐘,并開啟鬧鐘中斷,數(shù)據(jù)為BCD碼*/ HAL_RTC_SetAlarm_IT(&hrtc,&iAlarm,RTC_FORMAT_BCD); printf( "設(shè)置的鬧鐘時間是:%02x:%02x:%02x\r\n", iAlarm.AlarmTime.Hours, iAlarm.AlarmTime.Minutes, iAlarm.AlarmTime.Seconds ); break; default: printf("命令編號錯誤!\r\n"); } } else {/*沒收到數(shù)據(jù)尾0x5a*/ printf("數(shù)據(jù)的個數(shù)非法或者數(shù)據(jù)尾非法!\r\n"); } } else { /*沒收到數(shù)據(jù)頭*/ printf("數(shù)據(jù)頭非法!\r\n"); }}/********************************************************************** HAL_RTC_AlarmAEventCallback()功能:RTC鬧鐘事件回調(diào)函數(shù)參數(shù):指向時實鐘結(jié)構(gòu)體變量的指針返回值:無***********************************************************************/voidHAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef*hrtc){ RTC_AlarmTypeDefiAlarm; RTC_TimeTypeDef iTime; HAL_RTC_GetTime(hrtc,&iTime,RTC_FORMAT_BIN); printf("定時時間到,當(dāng)前時間為:%02d:%02d:%02d\r\n", iTime.Hours,iTime.Minutes,iTime.Seconds); iTime.Seconds+=10; if(iTime.Seconds>59) { iTime.Seconds%=60; iTime.Minutes++; if(iTime.Minutes>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論