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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC單片機芯片調試,這RS485數據收發見鬼了

[復制鏈接]
跳轉到指定樓層
樓主
ID:298713 發表于 2023-3-11 13:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
做STC8G1K08A-8Pin芯片的485數據收發,使用STC官方的庫編程比較方便。調試的時候數據收發始終不正常,想達到的目的是外部發送兩個字節的數據,第一個是A6握手數據,另一個任意數據。芯片接收并識別到握手數據后,回送收到的字節數與第二個任意數據。就這么簡單的一個小程序,搞了半天都沒搞定。后來為了驗證程序的正確性干脆把程序移植到了STC8G1K08-16Pin管腳的芯片上數據收發卻 是正常的。這是為何?下面是STC8G1K08A-8Pin的程序仿真測試:程序執行發送“L、B、H”三個字符,調用發送函數實參裝入正確但到賦值給SBUF卻是零,另外中斷接收到的數據也是錯誤的,懷疑是波特率錯誤,特意把時鐘從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;                                //結構定義
  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;                            //結構定義
  25.         COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;                //模式,      
  26.         COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;                    //使用Timer1做波特率發生器,  
  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;                       //指定中斷優先級(低到高)
  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. /******************** 主函數**************************/
  41. void main(void)
  42. {
  43.         GPIO_config();
  44.         UART_config();


  45.         TX1_write2buff(0x4C);    //"L"發送回送數據        
  46.         TX1_write2buff(0x42);    //"B"發送回送數據        
  47.         TX1_write2buff(0x48);    //"H"發送回送數據        
  48.         
  49.         P_SW1 = 0x84;    //UART1配置映射到P5.5與P5.4腳,SPI配置缺失
  50.         RS485_EN = 0;    //使485通訊使能在接收狀態         
  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);    //回送收到的數據長度        
  59.                                 TX1_write2buff(RX1_Buffer[1]);  //回送收到的數據                                
  60.                                  COM1.B_RX_OK = 0;           //清除標志
  61.                                  COM1.RX_Cnt = 0;      //清除數據長度
  62.                         }               
  63.          }
  64.         
  65. }
復制代碼



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

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

使用道具 舉報

沙發
ID:220661 發表于 2023-3-11 14:40 | 只看該作者
收發狀態切換的時候得加延時。
回復

使用道具 舉報

板凳
ID:298713 發表于 2023-3-11 15:13 | 只看該作者
gongnn 發表于 2023-3-11 14:40
收發狀態切換的時候得加延時。

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

使用道具 舉報

地板
ID:1034262 發表于 2023-3-13 11:18 | 只看該作者
RS485只是一個傳輸硬件,對于單片機來說,還是串口,沒區別,只多了一個IO控制方向。
回復

使用道具 舉報

5#
ID:1038987 發表于 2023-4-9 20:57 | 只看該作者
可能需要中斷處理,你的代碼看不懂。建議9600  115200  11M    sscom5.13.1
回復

使用道具 舉報

6#
ID:1042619 發表于 2023-4-9 22:44 | 只看該作者
用 STC-USB Link1D 仿真下就容易看到問題了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费在线观看av片 | 亚洲电影一级片 | wwww.xxxx免费| 久久久精品综合 | 久久久久久高清 | 国产精品爱久久久久久久 | 玖玖综合网| 国产成人jvid在线播放 | 在线观看精品视频网站 | 999国产精品视频免费 | 久久久久久久一区 | 99re| 久久性| 国产精品色av | 四虎在线观看 | 国产精品a免费一区久久电影 | aacc678成免费人电影网站 | 日本亚洲欧美 | 欧美成人hd| 精品久久久久久久久久久久久久 | 久久婷婷香蕉热狠狠综合 | 日一区二区| 超黄毛片 | 香蕉91| 91精品国产综合久久久久久丝袜 | 成人福利在线观看 | 色天天综合 | 国产精品久久久久久婷婷天堂 | 综合久久综合久久 | 在线欧美小视频 | 日韩手机视频 | 日韩欧美国产一区二区 | 精品一级| 国产91亚洲精品一区二区三区 | 成人影院免费视频 | 国产精品1区2区 | 免费的日批视频 | 欧美一区二区三区在线观看视频 | 欧美中文字幕一区 | 成人午夜电影网 | 久久久www成人免费无遮挡大片 |