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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32vet6單片機RS485通信程序程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:435120 發表于 2018-11-28 17:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
stm32vet6  RS485通信程序  需另外自己購買USB轉485的模塊

單片機源程序如下:
  1. #include "main.h"
  2. #include "delay.h"
  3. #include "uart5.h"

  4. int main(void)
  5. {   
  6.         u16 len;
  7.     u8  time;
  8.        
  9.         delay_init();            //延時初始化
  10.         RS485_1_Init(9600);    //第一路485初始化
  11.        
  12.         while(1)
  13.         {                 
  14.                 if(time>=50)                                        //time>=50表示500ms時間到
  15.                 {
  16.                         time=0;                                         //清除計數位
  17.                         RS485_1_printf("請您發送數據,以回車結尾\r\n");   //500ms時間到,發送提示信息
  18.                 }
  19.                 if(RS485_1_RX_STA&0x8000)                                  //RS485_1_RX_STA位15置位,表示接收完成
  20.                 {                                          
  21.                         len=RS485_1_RX_STA&0x3fff;                             //得到此次接收到的數據長度
  22.                         RS485_1_RX_BUF[len]='\0'   ;                           //加入結束符
  23.                         RS485_1_printf("你發送的數據:%s\r\n",RS485_1_RX_BUF); //返回接收到的數據
  24.                         RS485_1_RX_STA=0;                                      //清除狀態位
  25.                 }
  26.                 time++;                                             //計數+1
  27.                 delay_ms(10);                                       //延時10ms
  28.         }
  29. }
復制代碼

  1. /*-------------------------------------------------*/
  2. /*            RS485_1_1源文件,有2個函數              */
  3. /*-------------------------------------------------*/
  4. /* void RS485_1_1_Init(u32 bound)      485初始化串口5*/
  5. /* void RS485_1_1_printf(char* fmt,...)485printf函數 */
  6. /*-------------------------------------------------*/

  7. #include "uart5.h"
  8. #include "delay.h"
  9.        
  10. u8  RS485_1_RX_BUF[RS485_1_RXBUFF_SIZE];  //接收緩存區
  11. u16 RS485_1_RX_STA=0;                     //接收狀態標記

  12. /*-------------------------------------------------*/
  13. /*函數名:初始化串口5-RS485_1                      */
  14. /*參  數:bound:波特率                            */
  15. /*返回值:無                                       */
  16. /*-------------------------------------------------*/
  17. void RS485_1_Init(u32 bound)
  18. {                  
  19.     GPIO_InitTypeDef GPIO_InitStructure;
  20.         USART_InitTypeDef USART_InitStructure;
  21.         NVIC_InitTypeDef NVIC_InitStructure;
  22.        
  23.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE);  //使能串口5時鐘
  24.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  //使能GPIOC時鐘
  25.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);  //使能GPIOD時鐘
  26.        
  27.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;            //PC12
  28.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  29.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;             //復用推挽輸出
  30.     GPIO_Init(GPIOC, &GPIO_InitStructure);               //初始化PC12
  31.    
  32.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;            //PD2
  33.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  34.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
  35.     GPIO_Init(GPIOD, &GPIO_InitStructure);               //初始化PD2
  36.        
  37.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;            //PD4
  38.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  39.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //復用推挽輸出
  40.     GPIO_Init(GPIOD, &GPIO_InitStructure);               //初始化PD4
  41.        
  42.         USART_InitStructure.USART_BaudRate = bound;                                    //波特率設置
  43.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;                    //字長為8位數據格式
  44.         USART_InitStructure.USART_StopBits = USART_StopBits_1;                         //一個停止位
  45.         USART_InitStructure.USART_Parity = USART_Parity_No;                            //無奇偶校驗位
  46.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數據流控制
  47.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                       //收發模式
  48.     USART_Init(UART5, &USART_InitStructure);                                      //按配置設置串口4
  49.        
  50.     USART_Cmd(UART5, ENABLE);                              //使能串口5
  51.         USART_ClearFlag(UART5, USART_FLAG_TC);                        //清除標志位
  52.         USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);          //開啟接受中斷

  53.     NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;        //串口5中斷
  54.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; //搶占優先級3
  55.         NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;                //子優先級3
  56.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //中斷通道使能
  57.         NVIC_Init(&NVIC_InitStructure);                                //根據配置設置
  58.        
  59.         RS485_1_RX_TX=0;                                                            //接收模式
  60. }



  61. /*-------------------------------------------------*/
  62. /*函數名:第一路485的printf                        */
  63. /*參  數:無                                       */
  64. /*返回值:無                                       */
  65. /*-------------------------------------------------*/

  66. __align(8) u8  RS485_1_TX_BUF[RS485_1_TXBUFF_SIZE];  

  67. void RS485_1_printf(char* fmt,...)
  68. {  
  69.         u16 i,length;
  70.        
  71.         va_list ap;
  72.         va_start(ap,fmt);
  73.         vsprintf((char*)RS485_1_TX_BUF,fmt,ap);
  74.         va_end(ap);
  75.        
  76.         RS485_1_RX_TX=1;  //發送模式
  77.         delay_ms(1);
  78.        
  79.         length=strlen((const char*)RS485_1_TX_BUF);       
  80.         while((UART5->SR&0X40)==0);
  81.         for(i = 0;i < length;i ++)
  82.         {                       
  83.                 UART5->DR = RS485_1_TX_BUF[i];
  84.                 while((UART5->SR&0X40)==0);       
  85.         }       
  86.        
  87.         RS485_1_RX_TX=0;  //接收模式
  88.         delay_ms(1);
  89. }
復制代碼


所有資料51hei提供下載:
7-第1路 RS485_1 通信測試程序.rar (272.4 KB, 下載次數: 56)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:68875 發表于 2018-11-28 23:00 | 只看該作者

看一下學習一下
回復

使用道具 舉報

板凳
ID:452289 發表于 2020-6-5 14:32 | 只看該作者
RS485可以實現printf函數嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 我爱操 | av一级久久| 无码日韩精品一区二区免费 | 波多野结衣一区二区 | 国产午夜高清 | 不卡av在线 | 久热国产精品 | 国产精品久久久久久久一区二区 | 99reav | 午夜网站视频 | 亚洲色在线视频 | 久久免费精彩视频 | av一区二区在线观看 | 久久伊 | 综合精品久久久 | 精品久久久久久久久久久久久久 | 日韩精品在线看 | 97国产精品视频 | 中文字幕在线看人 | 精品国产91亚洲一区二区三区www | 亚洲第1页 | 免费在线国产视频 | 青青久草 | 97精品久久 | 亚洲一区有码 | 欧美高清dvd | 亚洲男人天堂网 | 91看片免费版| 午夜三级在线观看 | 天天插天天狠天天透 | 天天弄天天操 | 中文在线一区二区 | 欧美成人在线免费 | 91精品国产色综合久久 | 国产第一亚洲 | 国产免费视频 | 曰韩三级 | 九色在线观看 | 国产成人99久久亚洲综合精品 | 欧美日韩一区二区三区四区五区 | 狠狠躁18三区二区一区 |