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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
ID:298713 發(fā)表于 2023-3-11 13:28 | 顯示全部樓層 |閱讀模式
做STC8G1K08A-8Pin芯片的485數(shù)據(jù)收發(fā),使用STC官方的庫編程比較方便。調(diào)試的時候數(shù)據(jù)收發(fā)始終不正常,想達(dá)到的目的是外部發(fā)送兩個字節(jié)的數(shù)據(jù),第一個是A6握手?jǐn)?shù)據(jù),另一個任意數(shù)據(jù)。芯片接收并識別到握手?jǐn)?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的芯片頻率也是如此。不知道 問題在什么地方。

單片機(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)先級(低到高)
  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ù)長度        
  59.                                 TX1_write2buff(RX1_Buffer[1]);  //回送收到的數(shù)據(jù)                                
  60.                                  COM1.B_RX_OK = 0;           //清除標(biāo)志
  61.                                  COM1.RX_Cnt = 0;      //清除數(shù)據(jù)長度
  62.                         }               
  63.          }
  64.         
  65. }
復(fù)制代碼



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

回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久九精品 | 伊人一区 | 国产午夜精品一区二区三区四区 | 国产999精品久久久久久 | 日本超碰| 91传媒在线观看 | 国产在线精品一区 | 国产精品呻吟久久av凹凸 | 日本激情视频在线播放 | 亚洲精品在线视频 | 毛片久久久 | 激情小说综合网 | 午夜小电影| 四虎影院在线免费观看 | 三级黄色网址 | 精品综合网 | 欧美久久视频 | 日韩欧美在线视频 | 国产一区久久精品 | 亚洲精品自在在线观看 | 精品国产色 | 97伊人| 国产精品国产三级国产播12软件 | 亚洲三级国产 | 亚洲天堂一区 | 欧美国产精品久久久 | 国内精品视频在线观看 | 2018天天干天天操 | 国产在线观看av | 亚洲精品无 | 欧美精品综合在线 | 草草影院ccyy | 成人在线观 | 久产久精国产品 | 久久久久久一区 | 欧美一区二 | 天堂一区二区三区 | 精品免费视频 | 国产亚洲网站 | 日本一区二区三区四区 | 午夜影视网|