久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3697|回復(fù): 0
收起左側(cè)

STM32f103串口自適應(yīng)程序,批量驗證過,源代碼簡單可靠

[復(fù)制鏈接]
ID:433446 發(fā)表于 2018-11-26 16:03 | 顯示全部樓層 |閱讀模式
上電第一次通訊時,根據(jù)通訊數(shù)據(jù)幀的第一個固定字節(jié)判斷通訊的波特率,程序簡單可靠,已經(jīng)批量在產(chǎn)品使用,能適應(yīng)1200、2400、4800、9600、19200、115200bps波特率,還可以類推出38400bps、57600bps等常見波特率?梢宰鳛榇诓ㄌ芈首赃m應(yīng)程序設(shè)計的一個參考。
0.png

STM32f103單片機(jī)源程序如下:
  1. #include "main.h"
  2. #include "xx_Public.h"
  3. #include "xx_Uart.h"
  4. #include "xx_StaDetec.h"
  5. #include "xx_timer.h"
  6. #include "xx_wdog.h"


  7. unsigned char SIM1State,SIM2State;
  8. unsigned char CmdControlByte;//命令控制有關(guān)
  9. unsigned char CmdControlByte2;//命令控制有關(guān)
  10. unsigned char CardReaderStaByte;//卡機(jī)狀態(tài)和模式選擇

  11. unsigned char KeyTimer;//插卡消抖計數(shù)
  12. unsigned int DataTimeOver;//數(shù)據(jù)包超時時間
  13. unsigned char MYCHACKCARDSTAT;
  14. unsigned int LEDTimeCount=500;

  15. //==========================================
  16. //EEPROM 參數(shù)設(shè)置
  17. //==========================================
  18. void  Save_BTL(u32 addr,unsigned char mydata)
  19. {
  20.         unsigned char saveData[2];

  21.         
  22.         saveData[0] = mydata;
  23.         saveData[1] = ~mydata;
  24.         Write_STM32Flash(FIRST_ADDR+addr,saveData,2);
  25. }

  26. u32  Read_SavedBTL(u32 addr)
  27. {
  28.         unsigned char *paddr;
  29.         unsigned char saveData[2];
  30.         
  31.         
  32.         paddr = (unsigned char*)(FIRST_ADDR + addr);
  33.         
  34.         saveData[0] = *paddr;
  35.         saveData[1] = *(paddr + 1);

  36.         if((saveData[0] == 30)
  37.                 && ((saveData[0] & saveData[1]) == 0)
  38.                 && ((saveData[0] | saveData[1]) == 0xFF))
  39.                 return 4800;
  40.         
  41.         else if((saveData[0] == 32)
  42.                 && ((saveData[0] & saveData[1]) == 0)
  43.                 && ((saveData[0] | saveData[1]) == 0xFF))
  44.                 return 19200;
  45.         
  46.         else if((saveData[0] == 33)
  47.                 && ((saveData[0] & saveData[1]) == 0)
  48.                 && ((saveData[0] | saveData[1]) == 0xFF))
  49.                 return 38400;
  50.         
  51.         else if((saveData[0] == 34)
  52.                 && ((saveData[0] & saveData[1]) == 0)
  53.                 && ((saveData[0] | saveData[1]) == 0xFF))
  54.                 return 57600;
  55.         
  56.         else if((saveData[0] == 35)
  57.                 && ((saveData[0] & saveData[1]) == 0)
  58.                 && ((saveData[0] | saveData[1]) == 0xFF))
  59.                 return 115200;
  60.         
  61.         else return 115200;
  62. }

  63. void GetxxVersion(unsigned char cm,unsigned char pm1,unsigned char pm2)
  64. {
  65.         unsigned char version[14] = {"xxxxx V4.133 T"};

  66.         if(pm1 == 0x33)//內(nèi)部版本號
  67.         {
  68.                 ReturnToHost(RETURN_NO_STA,cm,pm1,pm2,SUCCESSED,version,14);
  69.         }
  70.         else ReturnToHost(RETURN_NO_STA,cm,pm1,pm2,SUCCESSED,version,12);
  71. }

  72. //=========命令解析及分發(fā)====================
  73. void MainEventDeal(void)
  74. {
  75.         //u32 temp;
  76.         unsigned char returnData[20];
  77.         unsigned char receiveData[260];
  78.         unsigned char cm,pm1,pm2,pm3,returnSta;
  79.         unsigned int receiveLen,sentLen,len,i;
  80.         

  81.         cm = RxDataBuffer[3];
  82.         pm1= RxDataBuffer[4];
  83.         pm2 = RxDataBuffer[5];
  84.         pm3 = RxDataBuffer[6];
  85.         len = (unsigned int)(RxDataBuffer[1] * 256 +RxDataBuffer[2]);
  86.         receiveLen = len -2;
  87.         for(i = 0;i < receiveLen;i++)
  88.                 receiveData[i] = RxDataBuffer[5 + i];
  89.         sentLen = 0;


  90.         switch(cm)
  91.         {
  92.                 case GET_MT_VER://cm2:30 外部版本  31內(nèi)部版本
  93.                         GetxxVersion(cm,pm1,pm2);
  94.                         break;        

  95.                 case SETBTL://設(shè)置波特率
  96.                         returnSta = SUCCESSED;
  97.                         switch(pm1)
  98.                         {
  99.                                 case SETBTL_4800:
  100.                                         Save_BTL(PARAM_BTL_ADDR,30);
  101.                                         break;        
  102.                                        
  103.                                 case SETBTL_9600:
  104.                                         Save_BTL(PARAM_BTL_ADDR,31);
  105.                                         break;
  106.                                        
  107.                                 case SETBTL_19200:
  108.                                         Save_BTL(PARAM_BTL_ADDR,32);
  109.                                         break;
  110.                                        
  111.                                 case SETBTL_38400:
  112.                                         Save_BTL(PARAM_BTL_ADDR,33);
  113.                                         break;

  114.                                 case SETBTL_57600:
  115.                                         Save_BTL(PARAM_BTL_ADDR,34);
  116.                                         break;
  117.                                        
  118.                                 case SETBTL_115200:
  119.                                         Save_BTL(PARAM_BTL_ADDR,35);
  120.                                         break;
  121.                                        
  122.                                 default:
  123.                                         returnSta = PMERR;
  124.                                         break;
  125.                         }
  126.                         ReturnToHost(ReturnNoPM2,cm,pm1,pm2,returnSta,returnData,sentLen);
  127.                         break;
  128.                
  129.                 default:        
  130.                         ReturnToHost(ReturnNoPM2,cm,pm1,pm2,CMERR,returnData,sentLen);
  131.                         break;
  132.         }
  133. }

  134. void SystemIni(void)
  135. {
  136.         S_Systimer_init();

  137.         //設(shè)置串口接收腳為外部中斷,設(shè)置計時的定時器
  138.         S_UsartRxPinSetExInt(USART1);
  139.         
  140.         S_LEDInit();//指示燈
  141. }
  142. //=========變量初始化=================
  143. void IniVariable(void)
  144. {
  145.         DataTimeOver = 0;
  146.         MYCHACKCARDSTAT = 1;//0x30;
  147. }

  148. void delay(unsigned int itimer)
  149. {
  150.         while(itimer--)
  151.         {
  152.                 __NOP();
  153.         }
  154. }

  155. //==========主函數(shù)=====================
  156. int main(void)
  157. {
  158.         unsigned char data1,data2,i;
  159.         unsigned int lenmag = 0;
  160.         
  161.         delay(1000);
  162.         STM32MCUIni();
  163.         SystemIni();
  164.         IniVariable();
  165.         TIM_Delayms(20);//延時20ms

  166.         while(1)
  167.           {
  168.                   if(UARTSET.type == 0)//
  169.                           UART_Baudset();
  170.                   else
  171.                 {
  172.                           UartDataAnaly();
  173.                         if(Test_CommandOkFlag)
  174.                         {
  175.                                 MainEventDeal();
  176.                                 Res_CommandOkFlag;
  177.                         }
  178.                 }
  179.           }
  180. }
復(fù)制代碼

所有資料51hei提供下載:
baudselfadaption.rar (520.84 KB, 下載次數(shù): 47)
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91国内精精品久久久久久婷婷 | 国产精品高潮呻吟久久av黑人 | 五月婷婷激情网 | 国产91色在线 | 亚洲 | 91色在线| 亚洲福利一区 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 亚洲一二三区在线观看 | 久久久久国产精品一区二区 | 久久er99热精品一区二区 | 日韩视频在线免费观看 | 精品日韩| 亚洲狠狠| 欧洲精品视频一区 | 国产99久久 | 2019天天干天天操 | 亚洲欧美中文日韩在线v日本 | av手机免费在线观看 | 一区二区三区不卡视频 | 国产一区二区在线免费观看 | 网站黄色在线免费观看 | 九色视频网 | 蜜桃视频在线观看免费视频网站www | 成人做爰9片免费看网站 | 91福利在线导航 | 欧美一区二区在线 | 欧美黄页| 老牛影视av一区二区在线观看 | 精品久久久久久久久久久久久久 | 国产一区 | av在线免费看网址 | 欧美一a | 色播视频在线观看 | 久久天堂网| 亚洲成人一二区 | 久草网在线视频 | 久草在线免费资源 | 一区二区三区电影在线观看 | 精品在线免费看 | 中文字幕伊人 | 美女中文字幕视频 |