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

標(biāo)題: STC單片機(jī)芯片調(diào)試,這RS485數(shù)據(jù)收發(fā)見鬼了 [打印本頁(yè)]

作者: wjw7680    時(shí)間: 2023-3-11 13:28
標(biāo)題: STC單片機(jī)芯片調(diào)試,這RS485數(shù)據(jù)收發(fā)見鬼了
做STC8G1K08A-8Pin芯片的485數(shù)據(jù)收發(fā),使用STC官方的庫(kù)編程比較方便。調(diào)試的時(shí)候數(shù)據(jù)收發(fā)始終不正常,想達(dá)到的目的是外部發(fā)送兩個(gè)字節(jié)的數(shù)據(jù),第一個(gè)是A6握手?jǐn)?shù)據(jù),另一個(gè)任意數(shù)據(jù)。芯片接收并識(shí)別到握手?jǐn)?shù)據(jù)后,回送收到的字節(jié)數(shù)與第二個(gè)任意數(shù)據(jù)。就這么簡(jiǎn)單的一個(gè)小程序,搞了半天都沒搞定。后來為了驗(yàn)證程序的正確性干脆把程序移植到了STC8G1K08-16Pin管腳的芯片上數(shù)據(jù)收發(fā)卻 是正常的。這是為何?下面是STC8G1K08A-8Pin的程序仿真測(cè)試:程序執(zhí)行發(fā)送“L、B、H”三個(gè)字符,調(diào)用發(fā)送函數(shù)實(shí)參裝入正確但到賦值給SBUF卻是零,另外中斷接收到的數(shù)據(jù)也是錯(cuò)誤的,懷疑是波特率錯(cuò)誤,特意把時(shí)鐘從P5.5輸出用示波器查看頻率有點(diǎn)小誤差是22.107M,但16Pin的芯片頻率也是如此。不知道 問題在什么地方。

單片機(jī)源程序如下:
  1. #include        "config.h"
  2. #include        "GPIO.h"
  3. #include        "UART.h"




  4. /************************ 485通訊與IO口配置 ****************************/
  5. void        GPIO_config(void)
  6. {
  7.         GPIO_InitTypeDef        GPIO_InitStructure;                                //結(jié)構(gòu)定義
  8. //初始化串口管腳
  9.         GPIO_InitStructure.Pin  =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;        //指定要初始化的IO
  10.         GPIO_InitStructure.Mode = GPIO_PullUp;                        //指定IO上拉準(zhǔn)雙向輸入或輸出方式
  11.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化
  12. //初始化UART1映射管腳
  13.         GPIO_InitStructure.Pin  = GPIO_Pin_4|GPIO_Pin_5;       //指定要初始化的IO, GPIO_Pin_4
  14.         GPIO_InitStructure.Mode = GPIO_PullUp;                      //指定IO上拉準(zhǔn)雙向輸入或輸出方式
  15.         GPIO_Inilize(GPIO_P5,&GPIO_InitStructure);        //初始化
  16. //初始化485芯片的使能控制管腳
  17.         GPIO_InitStructure.Pin  = GPIO_Pin_3;        //指定要初始化的IO, GPIO_Pin_0  GPIO_Pin_1
  18.         GPIO_InitStructure.Mode = GPIO_OUT_PP;    //指定IO推挽的輸入或輸出方式
  19.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化
  20.         
  21. }


  22. void        UART_config(void)
  23. {
  24.         COMx_InitDefine                COMx_InitStructure;                            //結(jié)構(gòu)定義
  25.         COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;                //模式,      
  26.         COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;                    //使用Timer1做波特率發(fā)生器,  
  27.         COMx_InitStructure.UART_BaudRate  = 9600ul;                        //波特率, 一般 110 ~ 115200
  28.         COMx_InitStructure.UART_RxEnable  = ENABLE;                       //接收允許,   
  29.         COMx_InitStructure.BaudRateDouble = DISABLE;                     //波特率加倍,
  30.         COMx_InitStructure.UART_Interrupt = ENABLE;                        //中斷允許,   
  31.         COMx_InitStructure.UART_Priority  = Priority_0;                       //指定中斷優(yōu)先級(jí)(低到高)
  32.         UART_Configuration(UART1, &COMx_InitStructure);                //初始化串口1


  33. }




  34. void delayms(unsigned int ms)
  35. {
  36.         unsigned int i,j;        
  37.         for(i = 0; i < ms; i++)
  38.         for(j = 0; j < 100; j++);
  39. }




  40. /******************** 主函數(shù)**************************/
  41. void main(void)
  42. {
  43.         GPIO_config();
  44.         UART_config();


  45.         TX1_write2buff(0x4C);    //"L"發(fā)送回送數(shù)據(jù)        
  46.         TX1_write2buff(0x42);    //"B"發(fā)送回送數(shù)據(jù)        
  47.         TX1_write2buff(0x48);    //"H"發(fā)送回送數(shù)據(jù)        
  48.         
  49.         P_SW1 = 0x84;    //UART1配置映射到P5.5與P5.4腳,SPI配置缺失
  50.         RS485_EN = 0;    //使485通訊使能在接收狀態(tài)         
  51.         EA = 1;          //開放所有中斷
  52.          
  53.         while(1)
  54.          {
  55.                  if(COM1.B_RX_OK == 1 && RX1_Buffer[0] == 0xa6)   //判斷接收標(biāo)志
  56.                         {         
  57.                                  delayms(200);        
  58.                                 TX1_write2buff(COM1.RX_Cnt);    //回送收到的數(shù)據(jù)長(zhǎng)度        
  59.                                 TX1_write2buff(RX1_Buffer[1]);  //回送收到的數(shù)據(jù)                                
  60.                                  COM1.B_RX_OK = 0;           //清除標(biāo)志
  61.                                  COM1.RX_Cnt = 0;      //清除數(shù)據(jù)長(zhǎng)度
  62.                         }               
  63.          }
  64.         
  65. }
復(fù)制代碼



485測(cè)試程序.rar (205.25 KB, 下載次數(shù): 7)


作者: gongnn    時(shí)間: 2023-3-11 14:40
收發(fā)狀態(tài)切換的時(shí)候得加延時(shí)。
作者: wjw7680    時(shí)間: 2023-3-11 15:13
gongnn 發(fā)表于 2023-3-11 14:40
收發(fā)狀態(tài)切換的時(shí)候得加延時(shí)。

試過了,不行。這個(gè)程序移植到STC8G1K08-16Pin上沒問題,收發(fā)切換不用加任何延遲。但在8pin芯片上不行。
作者: coody_sz    時(shí)間: 2023-3-13 11:18
RS485只是一個(gè)傳輸硬件,對(duì)于單片機(jī)來說,還是串口,沒區(qū)別,只多了一個(gè)IO控制方向。
作者: 15031773670    時(shí)間: 2023-4-9 20:57
可能需要中斷處理,你的代碼看不懂。建議9600  115200  11M    sscom5.13.1
作者: 大漠孤煙001    時(shí)間: 2023-4-9 22:44
用 STC-USB Link1D 仿真下就容易看到問題了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产成人免费视频网站视频社区 | 欧美日韩精品中文字幕 | h视频免费在线观看 | 久久精品一区二区视频 | 青青草视频免费观看 | 成人精品国产 | 欧美精品一区三区 | 亚洲一区播放 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 亚洲精品一二区 | 综合久久久久久久 | 日韩免费激情视频 | 精品国产一区二区三区久久久久久 | 在线观看黄色 | 国产欧美视频一区二区 | 精品国产乱码久久久久久闺蜜 | 精品久久久久久久人人人人传媒 | 91中文视频 | 一级毛片免费完整视频 | 91福利在线导航 | 特黄级国产片 | 五月花丁香婷婷 | 国产精品亚洲一区 | 国产九九精品 | 精品国产视频 | 国产精品视频免费观看 | 亚洲色片网站 | 台湾a级理论片在线观看 | 91佛爷在线观看 | 欧美一区二区三区,视频 | 国产精品一区二区三区四区 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国产一区二区三区不卡av | 国产精品揄拍一区二区久久国内亚洲精 | 69性欧美高清影院 | 二区三区在线观看 | 久久久区 | 精品一区二区三区在线视频 | 成人免费在线播放视频 | 国产精品亚洲视频 | 日韩一级欧美一级 |