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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2374|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区电影 | 亚洲久草| 欧美一区二不卡视频 | 精品国产乱码久久久久久a丨 | 在线中文视频 | 国内自拍偷拍 | 91久久久久 | 亚洲欧美日韩一区 | 精品国产一区二区三区在线观看 | 伊人免费在线观看 | 国产精品一区二区三区四区五区 | 日本不卡一区二区三区 | 日韩一级免费大片 | 午夜精品久久久久久久99黑人 | 午夜视频在线免费观看 | www.亚洲.com | 色狠狠桃花综合 | 免费人成激情视频在线观看冫 | 可以看黄的视频 | 亚洲午夜av久久乱码 | 精品久久99 | 99精品久久 | 亚洲精品白浆高清久久久久久 | av网站免费看 | 韩国理论电影在线 | 韩日精品视频 | 亚洲欧洲日韩 | 国产精品久久久久久久久久 | 亚洲成人av一区二区 | 黄色永久免费 | 日韩av三区| 中文字幕免费视频 | 久亚州在线播放 | 一区二区三区亚洲 | 亚洲一区二区三区在线免费观看 | 国产乱码精品一区二区三区五月婷 | 亚洲免费视频在线观看 | 91在线看网站 | 紧缚调教一区二区三区视频 | 国产日韩亚洲欧美 | 天天玩天天操天天干 |