[技术相关] SW341串口波特率自动识别程序

[复制链接]
 楼主| AdaMaYun 发表于 2023-8-22 10:00 | 显示全部楼层 |阅读模式
  1. #include "SWM341.h"

  2. void SerialInit(void);

  3. int main(void)
  4. {
  5.         uint32_t res, i;
  6.         UART_InitStructure UART_initStruct;
  7.         
  8.         SystemInit();
  9.         
  10.         SerialInit();
  11.         
  12.         PORT_Init(PORTD, PIN3, PORTD_PIN3_UART1_TX, 0);        //GPIOD.3配置为UART1输出引脚
  13.         PORT_Init(PORTC, PIN1, PORTC_PIN1_UART2_RX, 1);        //GPIOC.1配置为UART2输入引脚
  14.         
  15.         UART_initStruct.DataBits = UART_DATA_8BIT;
  16.         UART_initStruct.Parity = UART_PARITY_NONE;
  17.         UART_initStruct.StopBits = UART_STOP_1BIT;
  18.         UART_initStruct.RXThreshold = 3;
  19.         UART_initStruct.RXThresholdIEn = 0;
  20.         UART_initStruct.TXThreshold = 3;
  21.         UART_initStruct.TXThresholdIEn = 0;
  22.         UART_initStruct.TimeoutTime = 10;
  23.         UART_initStruct.TimeoutIEn = 0;
  24.         
  25.         UART_initStruct.Baudrate = 57600;
  26.          UART_Init(UART1, &UART_initStruct);
  27.         UART_Open(UART1);
  28.         
  29.         UART_initStruct.Baudrate = 9600;
  30.          UART_Init(UART2, &UART_initStruct);
  31.         UART_Open(UART2);
  32.            
  33.         /* 测试说明
  34.         *  将UART1_TX脚连接到UART2_RX,UART1波特率57600,UART2波特率9600
  35.         *  让UART1发送0xF8,UART2通过测量0xF8自动计算出波特率将自己的波特率设为57600
  36.         ****************************************************************************/
  37.         while(1==1)
  38.         {               
  39.                 UART_ABRStart(UART2, 0xF8);
  40.                
  41.                 while((res = UART_ABRIsDone(UART2)) == 0)
  42.                 {
  43.                         UART_WriteByte(UART1, 0xF8);
  44.                         while(UART_IsTXBusy(UART1));
  45.                 }
  46.                
  47.                 if(res == UART_ABR_RES_OK) printf("AutoBaud OK\r\n");
  48.                 else                       printf("AutoBaud Error\r\n");
  49.                
  50.                 printf("UART1 Baud Reg: %d\r\n", UART_GetBaudrate(UART1));
  51.                 printf("UART2 Baud Reg: %d\r\n", UART_GetBaudrate(UART2));
  52.                
  53.                 for(i = 0; i < SystemCoreClock/5; i++) __NOP();
  54.         }
  55. }


  56. void SerialInit(void)
  57. {
  58.         UART_InitStructure UART_initStruct;
  59.         
  60.         PORT_Init(PORTM, PIN0, PORTM_PIN0_UART0_RX, 1);        //GPIOM.0配置为UART0输入引脚
  61.         PORT_Init(PORTM, PIN1, PORTM_PIN1_UART0_TX, 0);        //GPIOM.1配置为UART0输出引脚
  62.          
  63.          UART_initStruct.Baudrate = 57600;
  64.         UART_initStruct.DataBits = UART_DATA_8BIT;
  65.         UART_initStruct.Parity = UART_PARITY_NONE;
  66.         UART_initStruct.StopBits = UART_STOP_1BIT;
  67.         UART_initStruct.RXThreshold = 3;
  68.         UART_initStruct.RXThresholdIEn = 0;
  69.         UART_initStruct.TXThreshold = 3;
  70.         UART_initStruct.TXThresholdIEn = 0;
  71.         UART_initStruct.TimeoutTime = 10;
  72.         UART_initStruct.TimeoutIEn = 0;
  73.          UART_Init(UART0, &UART_initStruct);
  74.         UART_Open(UART0);
  75. }

  76. /******************************************************************************************************************************************
  77. * 函数名称: fputc()
  78. * 功能说明: printf()使用此函数完成实际的串口打印动作
  79. * 输    入: int ch                要打印的字符
  80. *                        FILE *f                文件句柄
  81. * 输    出: 无
  82. * 注意事项: 无
  83. ******************************************************************************************************************************************/
  84. int fputc(int ch, FILE *f)
  85. {
  86.         UART_WriteByte(UART0, ch);
  87.         
  88.         while(UART_IsTXBusy(UART0));
  89.          
  90.         return ch;
  91. }



lizye 发表于 2023-8-22 21:16 | 显示全部楼层
感谢分享,虽然遍地都是
tpgf 发表于 2023-9-6 17:29 | 显示全部楼层
这个就是首先在更改之前我需要知道默认的波特率是吧
chenqianqian 发表于 2023-9-7 08:32 来自手机 | 显示全部楼层
串口波特率自动识别很重要
kxsi 发表于 2023-9-7 09:05 | 显示全部楼层
如果初始情况下我就不知道波特率的话 如何解决呢
zljiu 发表于 2023-9-7 09:46 | 显示全部楼层
检测到之后更改波特率配置的话 需要等待多长时间生效呢
drer 发表于 2023-9-7 10:40 | 显示全部楼层
zljiu 发表于 2023-9-7 09:46
检测到之后更改波特率配置的话 需要等待多长时间生效呢

这个应该不用等待吧 毕竟还有通讯时长呢
tfqi 发表于 2023-9-7 11:17 | 显示全部楼层
重新配置之后需要多长时间才能对新配置生效呢
磨砂 发表于 2023-9-7 23:07 | 显示全部楼层
有没有更简便的检测配置方式呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

299

主题

2492

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部

299

主题

2492

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部