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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3988|回復: 1
打印 上一主題 下一主題
收起左側

stm8 stm8s stm8af 485接口 modbus協議代碼(已實現)

[復制鏈接]
跳轉到指定樓層
樓主
ID:610433 發表于 2019-9-29 10:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人使用stm8af62a6,stm8s和stm8af大多數是互通的,只用一個庫函數
62a6只能使用uart3!

485接口是硬件,不需要管,任何硬件接線都可以實現

代碼見附件,已實現通信

主函數代碼,主要為初始化函數,以及modbus幀接收處理函數,幀接收處理按自己的需求自行修改,本例的處理函數為接收數據再多輸出一點數據

單片機源程序如下:
  1. /******************************************************************
  2. mian.c文件部分
  3. ******************************************************************/

  4. void main(void)
  5. {

  6.   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

  7.   GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);

  8.   UART3_DeInit();
  9.   UART3_Init((u32)9600, UART3_WORDLENGTH_8D, UART3_STOPBITS_1, UART3_PARITY_NO, UART3_MODE_TXRX_ENABLE);
  10.   UART3_ITConfig(UART3_IT_RXNE_OR, ENABLE);

  11.   TIM1_TimeBaseInit(15, TIM1_COUNTERMODE_UP, 1000, 0);
  12.   TIM1_ARRPreloadConfig(ENABLE);
  13.   TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);
  14.   TIM1_Cmd(ENABLE);

  15.   ITC_SetSoftwarePriority(ITC_IRQ_UART3_RX, ITC_PRIORITYLEVEL_3);
  16.   ITC_SetSoftwarePriority(ITC_IRQ_TIM1_OVF, ITC_PRIORITYLEVEL_1);

  17.   enableInterrupts();

  18.   while (1)
  19.   {
  20.     UartDriver();
  21.   }

  22. }


  23. /******************************************************************
  24. modbus.c文件
  25. ******************************************************************/
  26. #include "stm8s.h"

  27. extern void Delay(uint16_t nCount);     //延遲1us


  28. unsigned char cntRxd = 0;       //接受計數器
  29. unsigned char bufRxd[64];       //接受寄存器

  30. unsigned char flagFrame = 0;

  31. void UartWriteBuf(unsigned char * buf ,unsigned char len)       //串口輸出buf
  32. {
  33.   GPIO_WriteHigh(GPIOD, GPIO_PIN_3);

  34.   while(len--)
  35.   {
  36.     while(( UART3_GetFlagStatus(UART3_FLAG_TXE)==RESET));
  37.     UART3_SendData8(*buf++);
  38.     while(( UART3_GetFlagStatus(UART3_FLAG_TXE)==RESET));
  39.   }

  40.   Delay(0xFFFF);
  41.   GPIO_WriteLow(GPIOD, GPIO_PIN_3);
  42. }

  43. void UartAction(unsigned char * buf ,unsigned char len)         //幀處理函數
  44. {
  45.   buf[len++] = '\r';
  46.   buf[len++] = '\n';
  47.   UartWriteBuf(buf ,len);
  48. }

  49. unsigned char UartReadBuf(unsigned char * buf ,unsigned char len)       //串口buf讀取
  50. {
  51.   unsigned char i;
  52.   if(len > cntRxd)
  53.   {
  54.     len = cntRxd;
  55.   }

  56.   for(i = 0; i < len; i++)
  57.   {
  58.     *buf++ = bufRxd[i];
  59.   }
  60.   cntRxd = 0;

  61.   return len;
  62. }

  63. void UartReadMonitor(unsigned char ms)  //接收結束幀判斷
  64. {
  65.   static unsigned char cntbkp = 0;
  66.   static unsigned char idletmr = 0;

  67.   if(cntRxd > 0)
  68.   {
  69.     if(cntbkp != cntRxd)
  70.     {
  71.       cntbkp = cntRxd;
  72.       idletmr = 0;
  73.     }
  74.     else
  75.     {
  76.       if(idletmr < 30)
  77.       {
  78.         idletmr += ms;
  79.         if(idletmr >= 30)
  80.         {
  81.           flagFrame = 1;
  82.         }
  83.       }
  84.     }
  85.   }
  86.   else
  87.   {
  88.     cntbkp = 0;
  89.   }
  90. }

  91. void UartDriver(void)   //接收buf[len-2],處理判斷幀結構
  92. {
  93.   unsigned char len;
  94.   unsigned char buf[40];

  95.   if(flagFrame)
  96.   {
  97.     flagFrame = 0;
  98.     len = UartReadBuf(buf ,sizeof(buf)-2);
  99.     UartAction(buf ,len);
  100.   }
  101. }

  102. /******************************************************************
  103. it.c文件部分(中斷函數)
  104. ******************************************************************/

  105. INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
  106. {  
  107.   TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
  108.   UartReadMonitor(1);
  109. }



  110. INTERRUPT_HANDLER(UART3_RX_IRQHandler, 21)
  111. {
  112.    UART3_ClearITPendingBit(UART3_IT_RXNE);
  113.    if(cntRxd < sizeof(bufRxd))
  114.    {
  115.      bufRxd[cntRxd++] = UART3_ReceiveData8();
  116.    }
  117. }
復制代碼

全部資料51hei下載地址:
Demo.7z (3.94 MB, 下載次數: 128)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:965139 發表于 2021-9-19 17:14 | 只看該作者
一直再尋找,非常感謝
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中国农村毛片免费播放 | 久久久国产视频 | 少妇一级淫片免费放 | 精品一区视频 | 中文字幕不卡在线 | 成人特级毛片 | 一道本在线 | 亚洲第一免费视频 | 亚洲视频在线播放 | 三级黄色录像片 | 国产一区在线观看视频 | 秋霞午夜鲁丝一区二区老狼 | 日韩免费在线观看视频 | 久久精品福利视频 | 天天干天天干天天操 | 婷婷综合| www午夜 | 亚洲福利网站 | 色妞网 | 毛片aaa| 久久综合激情 | 中文字幕日韩高清 | 国产超碰人人模人人爽人人添 | 性色av一区二区 | av在线免费网站 | 欧美综合色 | jlzzjlzz欧美大全 | 国产亚洲精品成人av久久ww | 香蕉视频网站 | 欧美日韩a | 青青草精品 | 国产精品三级在线 | 欧美黑人一区二区三区 | 欧美一级在线观看 | 久久精品亚洲 | 91成人在线观看喷潮 | 国产精品一级二级 | 一级黄片毛片 | 欧美色图一区二区 | 欧美1级片 | av免费在线观看网站 |