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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2379|回復: 5
收起左側(cè)

STC單片機芯片調(diào)試,這RS485數(shù)據(jù)收發(fā)見鬼了

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

單片機源程序如下:
  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上拉準雙向輸入或輸出方式
  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上拉準雙向輸入或輸出方式
  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)先級(低到高)
  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)   //判斷接收標志
  56.                         {         
  57.                                  delayms(200);        
  58.                                 TX1_write2buff(COM1.RX_Cnt);    //回送收到的數(shù)據(jù)長度        
  59.                                 TX1_write2buff(RX1_Buffer[1]);  //回送收到的數(shù)據(jù)                                
  60.                                  COM1.B_RX_OK = 0;           //清除標志
  61.                                  COM1.RX_Cnt = 0;      //清除數(shù)據(jù)長度
  62.                         }               
  63.          }
  64.         
  65. }
復制代碼



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

回復

使用道具 舉報

ID:220661 發(fā)表于 2023-3-11 14:40 | 顯示全部樓層
收發(fā)狀態(tài)切換的時候得加延時。
回復

使用道具 舉報

ID:298713 發(fā)表于 2023-3-11 15:13 | 顯示全部樓層
gongnn 發(fā)表于 2023-3-11 14:40
收發(fā)狀態(tài)切換的時候得加延時。

試過了,不行。這個程序移植到STC8G1K08-16Pin上沒問題,收發(fā)切換不用加任何延遲。但在8pin芯片上不行。
回復

使用道具 舉報

ID:1034262 發(fā)表于 2023-3-13 11:18 | 顯示全部樓層
RS485只是一個傳輸硬件,對于單片機來說,還是串口,沒區(qū)別,只多了一個IO控制方向。
回復

使用道具 舉報

ID:1038987 發(fā)表于 2023-4-9 20:57 | 顯示全部樓層
可能需要中斷處理,你的代碼看不懂。建議9600  115200  11M    sscom5.13.1
回復

使用道具 舉報

ID:1042619 發(fā)表于 2023-4-9 22:44 | 顯示全部樓層
用 STC-USB Link1D 仿真下就容易看到問題了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人三级视频在线观看 | 在线视频中文字幕 | 免费观看黄网站 | 成人av网站在线观看 | 国产在线精品一区二区 | 欧美国产视频 | 欧美日韩视频在线第一区 | 一区视频在线播放 | 午夜精品久久久久久久 | 毛片区 | 国产精品久久久久久久久久妞妞 | 久在线| 中文字幕 在线观看 | 隔壁老王国产在线精品 | www.一级毛片 | www久久久 | 精品国产一区二区久久 | 日本久久精品视频 | 一级一级毛片免费看 | 亚洲精品久久久久avwww潮水 | 亚洲三级在线 | 亚洲看片| 天天爽夜夜爽精品视频婷婷 | 色综合区 | 毛片一区二区 | 欧美一二区 | 欧美一区二区三区国产 | 久久国产精品亚洲 | 国产伦精品一区二区三区四区视频 | 天堂久久一区 | 国产男女视频网站 | 欧美日韩国产一区二区三区 | 色天堂影院| 日韩精品在线网站 | 亚洲精品免费在线观看 | 中文字幕一级毛片视频 | 免费黄色a视频 | 亚洲午夜视频 | av黄色在线观看 | 国产一区二区在线播放视频 | 成人免费在线小视频 |