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

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

QQ登錄

只需一步,快速開始

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

rtthread stm32f103 modbus 從機(jī)例程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:483892 發(fā)表于 2019-9-28 20:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
stm32F103 最小系統(tǒng),modbus slave RTU 示例代碼,采用freemodbus

單片機(jī)源程序如下:
  1. #include <rtthread.h>
  2. #include <rtdevice.h>
  3. #include <board.h>

  4. #include "wdt.h"
  5. //#include "uart.h"
  6. //#include "mpu6050.h"
  7. #include "mb_slave.h"
  8. #include "bsp_flash.h"

  9. /* 私用宏定義----------------------------------------------------------------*/
  10. #define THREAD_PRIORITY         25
  11. #define THREAD_STACK_SIZE       512
  12. #define THREAD_TIMESLICE        5

  13. #define EVENT_BIT_0         (1 << 0)
  14. #define EVENT_BIT_1         (1 << 1)
  15. //#define EVENT_BIT_2         (1 << 2)
  16. //#define EVENT_BIT_3         (1 << 3)
  17. //#define EVENT_BIT_4         (1 << 4)
  18. //#define EVENT_BIT_5         (1 << 5)


  19. /* 私用變量----------------------------------------------------------------*/


  20. /**************************** 任務(wù)句柄 ********************************/

  21. static rt_thread_t th_wdg = RT_NULL; //看門狗

  22. static rt_thread_t th_Gyro = RT_NULL; //陀螺儀

  23. /*事件控制塊*/
  24. static struct rt_event event;

  25. /*wdg 入口函數(shù)*/
  26. static void th_wdg_entry(void *parameter)
  27. {
  28.     rt_uint32_t count = 0;

  29.     while (1)
  30.     {
  31.         
  32. //        rt_kprintf("wdg thread count: %d\n", count ++);
  33.         rt_thread_mdelay(50);
  34.                         /* 收到所有事件,復(fù)位看門狗*/
  35.                                 rt_uint32_t e;
  36.                                 if (rt_event_recv(&event, (EVENT_BIT_0     ),
  37.                                                                                                         RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR,
  38.                                                                                                         RT_WAITING_FOREVER, &e) == RT_EOK)
  39.                                 {
  40. //                                                rt_kprintf("wdg: AND recv event 0x%x\n", e);
  41.                                                 //喂狗
  42.                                                 iwdg_feed();
  43.                                 }
  44.                                
  45.     }
  46. }


  47. /* gyro 入口函數(shù)*/
  48. static void th_Gyro_entry(void *parameter)
  49. {
  50. //        float angle_Y = 0;                //初始狀態(tài)值       
  51. //        float angle_X = 0;
  52. //        float angle_Z = 0;
  53. //       
  54. //    rt_int16_t temp;        //溫度
  55. //    rt_int16_t gx,gy,gz;    //三軸加速度
  56. //    rt_int16_t ax,ay,az;    //三軸角速度
  57. //   
  58. //    rt_err_t ret;
  59. //   
  60.     while(1)
  61.     {
  62. //        ret = mpu6050_temperature_get(&temp);
  63. //        if (ret != RT_EOK)
  64. //        {
  65. //            rt_kprintf("mpu6050 : get temperature error\r\n");
  66. //        }            
  67. //        ret = mpu6050_accelerometer_get(&ax, &ay, &az);
  68. //        if (ret != RT_EOK)
  69. //        {
  70. //            rt_kprintf("mpu6050 : get acc error\r\n");
  71. //        }
  72. //        ret = mpu6050_gyroscope_get(&gx, &gy, &gz);
  73. //        if (ret != RT_EOK)
  74. //        {
  75. //            rt_kprintf("mpu6050 : get gyro error\r\n");
  76. //        }
  77. //        if (ret == RT_EOK)
  78. //        {
  79. //            rt_kprintf("mpu6050: temperature=%-6d gx=%-6d gy=%-6d gz=%-6d ax=%-6d ay=%-6d az=%-6d\r\n",temp/100,gx,gy,gz,ax,ay,az);
  80. //                        angle_X=Kalman_X(ax/100,ay/100,az/100,gx,gy,gz);
  81. //                        angle_Y=Kalman_Y(ax/100,ay/100,az/100,gx,gy,gz);
  82. //                        angle_Z=Kalman_Z(ax/100,ay/100,az/100,gx,gy,gz);
  83. //                        rt_kprintf("x=%-6d  y=%-6d   z=%-6d \r\n ",angle_X,angle_Y,angle_Z);
  84. //        }
  85. //        rt_thread_delay(rt_tick_from_millisecond(1000));

  86.                                 rt_event_send(&event, EVENT_BIT_0);
  87.                                 rt_thread_delay(200);
  88.     }



  89. }


  90. //動(dòng)態(tài)創(chuàng)建線程
  91. void th_create(){
  92.          rt_err_t result;

  93.     /* 初始化事件對(duì)象 */
  94.     result = rt_event_init(&event, "event", RT_IPC_FLAG_FIFO);
  95.     if (result != RT_EOK)
  96.     {
  97.         rt_kprintf("init event failed.\n");
  98.         return ;
  99.     }
  100.        
  101.        
  102.                 /*動(dòng)態(tài)創(chuàng)建WDG線程*/
  103.     th_wdg = rt_thread_create("wdg",
  104.                             th_wdg_entry, RT_NULL,
  105.                             THREAD_STACK_SIZE-256,
  106.                             THREAD_PRIORITY, THREAD_TIMESLICE);
  107.    
  108.     /* 如果獲取線程控制塊,啟動(dòng)這個(gè)線程 */
  109.     if (th_wdg != RT_NULL)
  110.                         {
  111.         rt_thread_startup(th_wdg);
  112.                         }
  113.                                
  114.                 /*動(dòng)態(tài)創(chuàng)建姿態(tài)獲取線程*/
  115.     th_Gyro = rt_thread_create("Gyro",
  116.                             th_Gyro_entry, RT_NULL,
  117.                             THREAD_STACK_SIZE,
  118.                             THREAD_PRIORITY-1, THREAD_TIMESLICE);
  119.    
  120.     /* 如果獲取線程控制塊,啟動(dòng)這個(gè)線程 */
  121.     if (th_Gyro != RT_NULL)
  122.         rt_thread_startup(th_Gyro);
  123.                
  124.        
  125.                
  126.                
  127. }


  128. int main(void)
  129. {
  130.        
  131. //         //485 初始化
  132. //                uart5_init();
  133.        
  134.    //創(chuàng)建線程
  135.                 th_create();
  136.        
  137.          //modbus 初始化
  138.                 mb_slave_init();
  139.        
  140.                 //看門狗初始化

  141.                 if(iwdg_init()==RT_EOK){
  142.                         rt_kprintf("iwdg init success.\n");
  143.                 };
  144.                
  145. //                rt_pin_mode(MODBUS_MASTER_RT_CONTROL_PIN_INDEX, PIN_MODE_OUTPUT);
  146. //                 rt_pin_write(MODBUS_MASTER_RT_CONTROL_PIN_INDEX, PIN_HIGH);
  147. //                #define RT_MODBUS_MASTER_USE_CONTROL_PIN 1
  148. //                #define MODBUS_MASTER_RT_CONTROL_PIN_INDEX 19
  149.                
  150. //                uint16_t Data [6] = {7,1,2,3,4,5};
  151. //                uint32_t  Address = 0x0800FC00 ;                
  152. //                FLASH_WriteData(Address,Data,1);
  153. //               
  154. //                uint16_t Text [6] = {0};
  155. //                FLASH_ReadMoreData(Address,Text,6);
  156. //                for(int i=0;i<6;i++){
  157. //                        rt_kprintf("%d \r\n",Text[i]);
  158. //                }
  159.                

  160.     return RT_EOK;
  161. }
復(fù)制代碼

所有資料51hei提供下載:
stm32f103_modbus.rar (111.17 KB, 下載次數(shù): 74)


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:270740 發(fā)表于 2019-12-9 17:10
版主,請(qǐng)屏蔽此貼,從其它地方抄的內(nèi)容,賺不知情的人員的黑幣。我反對(duì)

板凳
ID:208337 發(fā)表于 2021-3-2 16:45 | 只看該作者
能不能直接用?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区高清在线观看 | 成人一区二区三区 | 在线免费中文字幕 | 午夜在线免费观看视频 | 免费黄色av | 在线不卡av | 一呦二呦三呦国产精品 | 日韩精品久久久久 | 欧美视频一区 | 国产一区二区成人 | 亚洲色图第一页 | 国产亚洲一区二区在线观看 | 18成人在线观看 | 能看的av| www.youjizz.com日韩 | 99re99| 一级黄色影片在线观看 | 天天看天天爽 | 中文字幕在线观看一区 | 成人午夜免费视频 | 天堂在线www | 综合精品| 国产毛片视频 | 国产精品九九九 | a免费在线 | 精品美女视频在免费观看 | 99久久精品免费看国产小宝寻花 | 国产一区二区在线免费观看 | 福利视频一区二区 | 精品中文字幕一区 | 中文字幕精品一区久久久久 | 亚洲激情在线观看 | 国产成人小视频 | 伊人91在线 | 国产精品美女久久久久久免费 | 青青久草 | 在线观看日韩 | 国产福利一区二区 | 精品久久久久久久久久久 | 性高湖久久久久久久久aaaaa | 久久国产成人精品国产成人亚洲 |