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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5351|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM8單片機(jī)串口簡單自定義協(xié)議 用XCOM串口調(diào)試助手

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:96313 發(fā)表于 2018-9-27 16:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
串口波特率 115200
數(shù)據(jù)接收格式0x66 0x64 xx xx xx xx xx xx xx xx xx xx xx xx 0x64 0x66 0x0D 0x0A
數(shù)據(jù)發(fā)送格式0x66 0x64 xx xx xx xx xx xx xx xx xx xx xx xx 0x64 0x66

中間的xx是自定義想要發(fā)送的數(shù)據(jù) , 簡單自定義的協(xié)議 , 具有一定的查錯(cuò)能力。

單片機(jī)源程序如下:
  1. //*********加入串口 2018  05  21  wangjiuqiang*****************************************************
  2. /*
  3. PC2 USART1_RX ---->>> CH340 TX
  4. PC3 USART1_TX ---->>> CH340 RX
  5. */


  6. #define TXBUF_SIZE 16
  7. #define RXBUF_SIZE 18


  8. _Bool bTX_finished=0;
  9. _Bool bRX_finished=0;//串口接收完一幀數(shù)據(jù)標(biāo)志位


  10. unsigned int ui8TX_number = 16;


  11. unsigned int ui8RX_counter=18;
  12. //66 64 00 03 04 05 06 07 08 09 0A 0B 0C 0D 64 66
  13. /*       0    1    2   3   4     5    6    7    8    9    10     11  12  13  14  15
  14.                          0x66 0x64 0x00                                                      0x64 0x66
  15. 發(fā)送  |數(shù)據(jù)包頭| 指令| AD 電壓 | 氣壓   |進(jìn)氣調(diào)整值|排氣調(diào)整值|   3byte 空 |數(shù)據(jù)包尾| //發(fā)送信息 指令0x00
  16. 接收  |數(shù)據(jù)包頭| 指令|目標(biāo)氣壓 |進(jìn)氣P|I | D | 排氣P|  I | D   |   3byte 空 |數(shù)據(jù)包尾| //接收信息 指令0x01 修改目標(biāo)氣壓
  17. 接收  |數(shù)據(jù)包頭| 指令|目標(biāo)氣壓 |進(jìn)氣P|I | D | 排氣P|  I | D   |   3byte 空 |數(shù)據(jù)包尾| //接收信息 指令0x02 修改PID參數(shù)
  18. */
  19. /***************************************|數(shù)據(jù)包頭| 指令| AD 電壓 | 氣壓   |排氣調(diào)整值|進(jìn)氣調(diào)整值|   3byte 空 |數(shù)據(jù)包尾|*/
  20. unsigned char ui8TX_buffer[TXBUF_SIZE]={0x66,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x66};
  21. unsigned char ui8RX_buffer[RXBUF_SIZE];


  22. #define USART1_SR_TC    USART1_SR|(~0x40)//USART1_SR_TC 為0發(fā)送未完成   為1發(fā)送完成         
  23. #define USART1_SR_RXNE  USART1_SR|(~0x20)//USART1_SR_RXNE 為1表示接收到了數(shù)據(jù)  為0沒收到數(shù)據(jù)



  24. //***************************************************************************************

  25. //*******************UART**********************************************


  26. void UART_Init(void)
  27. {
  28.     /*********************************/


  29.     PC_DDR = 0<<2;//輸入


  30.     PC_CR1 = 1<<2;//上拉輸入


  31.    
  32.     PC_ODR = 1<<3;


  33.     PC_CR1 = 1<<3;//推挽輸出


  34.     PC_CR2 = 1<<3;//輸出擺率10M   


  35.     PC_DDR = 1<<3;//輸出高電平,TX空閑狀態(tài)為高電平,如果不設(shè)置,會(huì)莫名奇妙的發(fā)送0x00




  36.     CLK_PCKENR1 |=1<<5;//開啟USART1外設(shè)時(shí)鐘




  37.     //開啟引腳的UART功能


  38.     //00: USART1_TX on PC3 and USART1_RX on PC2


  39.     //01: USART1_TX on PA2 and USART1_RX on PA3


  40.     //10: USART1_TX on PC5 and USART1_RX on PC6


  41. //   SYSCFG_RMPCR1 &= (~0x30);//PC2,PC3 //默認(rèn)


  42.     //如果需要使用其他引腳作為串口發(fā)送接收引腳,請(qǐng)?jiān)谶@里選擇
  43.    
  44.     //設(shè)置串口工作方式


  45.     USART1_CR1 &= 0x00;//~0X3E;//1 start bit,8 data bit,n stop bit

  46.     USART1_CR3 &= 0x00;//1 stop bit


  47.     //設(shè)置波特率


  48.     //波特率設(shè)置為9600


  49.     // 2000000/9600=208    //2000000是此時(shí)系統(tǒng)的主時(shí)鐘頻率,默認(rèn)8分頻,16M/8=2M


  50.     //208(DEC)=00D0(HEX)
  51. /*16000000 / 9600 = 1666 =  0x0682 */
  52. /*16000000 / 115200 = 138 = 0x008A */
  53. /*
  54. USART1_BRR2 [15:12  3:0]
  55. USART1_BRR1 [11 : 4]
  56. */
  57.     USART1_BRR2 =0x0A;//the BRR2 should be programmed before BRR1  0x03   0x00


  58.     USART1_BRR1 =0x08;//9600 683                                   0x68   0x8A




  59.   //  USART1_CR2 = 1<<3;//使能發(fā)送


  60.    // USART1_CR2 = 1<<7;//打開發(fā)送中斷


  61.          // USART1_CR2 = 1<<2;//使能接收
  62.       USART1_CR2=0x24;//打開接收
  63.    // USART1_CR2 = 1<<5;//打開接收中斷


  64. }
  65. /*
  66. 發(fā)送輸入采集電壓數(shù)據(jù)到串口 2byte
  67. 低位在前,高位在后
  68. */
  69. void recover_command(void)
  70. {
  71.         //指令為0  只設(shè)置氣壓參數(shù)
  72.         //指令為1  只設(shè)定PID參數(shù)
  73.         //發(fā)送返回為  0 告訴當(dāng)前是通訊控制
  74.         //發(fā)送返回為  1 告訴當(dāng)前是輸入控制
  75.         char SET_Pressure_Pid=0;
  76.       
  77.         SET_Pressure_Pid = ui8TX_buffer[2];  
  78.       
  79. }
  80. void send_ADC_data(int IN_voltage)
  81. {
  82.         ui8TX_buffer[3]=        IN_voltage   ;
  83.         ui8TX_buffer[4]=        IN_voltage>>8;
  84.         //USART1_CR2 |=0xFB;//打開發(fā)送
  85. }
  86. void send_DAC_data(int IN_pressure)//0
  87. {
  88.         if(IN_pressure<=0)IN_pressure=0;
  89.       
  90.         ui8TX_buffer[5]=        IN_pressure   ;
  91.         ui8TX_buffer[6]=  IN_pressure>>8;
  92.         //USART1_CR2 |=0xFB;//打開發(fā)送
  93. }
  94. void send_SUP_PWM_data(int IN_SUP_PWM)
  95. {


  96.         ui8TX_buffer[7]=         IN_SUP_PWM   ;
  97.         ui8TX_buffer[8]=  IN_SUP_PWM>>8;
  98.         //USART1_CR2 |=0xFB;//打開發(fā)送
  99. }
  100. void send_EXH_PWM_data(int IN_EXH_PWM)
  101. {


  102.         ui8TX_buffer[9]=        IN_EXH_PWM   ;
  103.         ui8TX_buffer[10]=  IN_EXH_PWM>>8;
  104.         //USART1_CR2 |=0xFB;//打開發(fā)送
  105. }


  106. void send_Prssure_data(int Pressure_data0)//0
  107. {
  108. //        if(IN_pressure<=0)IN_pressure=0;
  109.       
  110.         ui8TX_buffer[2]= Pressure_data0   ;
  111.         ui8TX_buffer[3]= Pressure_data0>>8;
  112.         //USART1_CR2 |=0xFB;//打開發(fā)送
  113. }


  114. //*******************************************************************************************
  115.         if(ADC_js%10==0)
  116.                 {
  117.                         if(bRX_finished==1)
  118.                         {
  119.                                 bRX_finished=0;
  120.                                 switch(ui8RX_buffer[2])
  121.                                 {
  122.                                         case 0xA0://打開氣壓發(fā)送
  123.                                         //finish=1;
  124.                                          TIM1_CR1 |= (0x1); //TIM1 run  測(cè)試用
  125.                                         ui8RX_buffer[2]=0;
  126.                                         break;
  127.                                         case 0xA1://關(guān)閉氣壓發(fā)送
  128.                                         //finish=0;
  129.                                                 TIM1_CR1 &= ~(0x1); //TIM1 stop
  130.                                         ui8RX_buffer[2]=0;
  131.                                         break;
  132.                                         case 0xA2://打開電磁閥
  133.                                 //        tmp_test=1;
  134.                                         MCU_SUP=0;
  135.                                         ui8RX_buffer[2]=0;
  136.                                         break;
  137.                                         case 0xA3://關(guān)閉電磁閥
  138.                                 //        tmp_test=0;
  139.                                         MCU_SUP=1;
  140.                                         ui8RX_buffer[2]=0;
  141.                                         break;
  142.                                         default:ui8RX_buffer[2]=0;
  143.                                 }
  144.                           
  145.                         }
  146.                 }



  147. //***************************************************************************************




  148. /*************************************************************************************************** ***


  149. * 名 稱: USART_TX_ISR()


  150. * 功 能: UART的Tx事件處理函數(shù)


  151. * 入口參數(shù):無


  152. * 出口參數(shù):無


  153. * 說 明:發(fā)送ui8TX_buffer數(shù)組中的數(shù)據(jù),發(fā)送完成后,置位bTX_finished標(biāo)志位,下一次進(jìn)入中斷后關(guān)閉發(fā)送


  154. * 范 例:無


  155. ******************************************************************************************************/


  156. @far @interrupt void USART_TX_ISR (void)
  157. {
  158.   static unsigned int cnts=0;
  159.   /*if(bTX_finished && USART1_SR_TC)
  160.   {
  161.     bTX_finished=0;  
  162.     USART1_CR2 &= ~0xC0;//關(guān)閉發(fā)送中斷
  163.         //        USART1_CR2=0x24;//打開接收
  164.   }*/
  165.         if(USART1_SR_TC != 1)//不等于1 表示發(fā)送未完成
  166.   {
  167.                 USART1_DR =  ui8TX_buffer[cnts++];
  168.     if(cnts>=ui8TX_number)
  169.     {
  170.       cnts=0;
  171.       bTX_finished=1;
  172.                         USART1_CR2 &= ~0x80;//關(guān)閉發(fā)送中斷  1100 0000 == 0xC0 ~= 0011 1111
  173.     }  
  174.   }
  175.         else cnts=0;
  176. }


  177. /******************************************************************************************************


  178. * 名               稱: USART_RX_ISR()


  179. * 功               能: UART的Tx事件處理函數(shù)


  180. * 入口             參數(shù):無


  181. * 出口             參數(shù):無


  182. * 說               明:


  183. * 范               例:無


  184. ******************************************************************************************************/


  185. @far @interrupt void USART_RX_ISR (void)
  186. {
  187.   static unsigned int ui8RX_temp=0;
  188.       
  189.   if(USART1_SR_RXNE)
  190.   {
  191.     ui8RX_buffer[ui8RX_temp++] = USART1_DR;
  192.                 if(ui8RX_temp>=ui8RX_counter)
  193.     {
  194.       ui8RX_temp=0;
  195.                         if(ui8RX_buffer[0] == 0x66 && ui8RX_buffer[1] == 0x64 && ui8RX_buffer[14] == 0x64 && ui8RX_buffer[15] == 0x66)
  196.       bRX_finished=1;
  197.                         else
  198.                         {
  199.                                 bRX_finished=0;
  200.                         }
  201.          //   USART1_CR2 &= 0<<2;//禁用接收
  202.    //   USART1_CR2 &= 0<<5;//緊張接收中斷
  203.     }
  204.   }         
  205. }
復(fù)制代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:96313 發(fā)表于 2018-9-27 16:04 | 只看該作者
單片機(jī)型號(hào) STM8L152R8T6
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久免费看 | 韩国久久精品 | 久久精品99久久 | 亚洲在线成人 | 国产婷婷色一区二区三区 | 欧美xxxx网站 | 一区二区高清不卡 | 久久精品免费一区二区三 | 99精品国产一区二区青青牛奶 | 欧美精品乱码久久久久久按摩 | 久久国产精品99久久久久久丝袜 | 成人一区二区三区在线观看 | 黄色一级视频免费 | 国产精品污www一区二区三区 | 久久久久国产精品一区二区 | 日日淫| av免费看在线 | 国产精品一区二区视频 | 久热国产精品视频 | 蜜桃综合在线 | 极品的亚洲 | 中文字幕一区二区三区四区五区 | 超碰97免费在线 | 国产精品永久久久久 | 欧美一区二区大片 | 久色网 | 欧美精品一区二区在线观看 | 国产最新精品视频 | 亚洲国产精品一区在线观看 | 亚洲精品一区二区冲田杏梨 | 日韩欧美二区 | 欧美高清dvd | 欧美一级片久久 | 影音av| 免费在线观看一区二区 | 久久这里只有精品首页 | 欧美一区二区三区在线 | 三级视频久久 | 久久爱一区 | 91观看| 欧美free性 |