yicool 发表于 2021-4-15 12:16

HC32F005 SDK串口例子设置9600正常115200异常

如题 HC32F005 SDK串口例子设置9600正常115200异常
配置我参考sdk的例子
    //外设时钟使能
    Sysctrl_SetPeripheralGate(SysctrlPeripheralBt,TRUE);//模式0/2可以不使能
    Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);

    stcBaud.bDbaud= 0u;// 波特率功能 0:单倍波特率; 1:双倍波特率
    stcBaud.u32Baud = 115200u;//更新波特率位置
    stcBaud.enMode= UartMode3; //计算波特率需要模式参数注意跟 stcCfg.enRunMode = UartMode1; 同步
    stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); //获取PCLK
    timer = Uart_SetBaudRate(M0P_UART1, &stcBaud);
       
    stcBtCfg.enMD = BtMode2;
    stcBtCfg.enCT = BtTimer;
    Bt_Init(TIM1, &stcBtCfg);//调用basetimer1设置函数产生波特率
    Bt_ARRSet(TIM1,timer);
    Bt_Cnt16Set(TIM1,timer);
//    Bt_ARRSet(TIM1,(0x10000-7)); //datasheet 有参考78=9600 7=115200
//    Bt_Cnt16Set(TIM1,(0x10000-7));
    Bt_Run(TIM1);
请问为什么出现数据不对呢?
应该如何配置

binoo7 发表于 2021-4-15 12:45

终于有人发现了啊,这个问题我也遇到过,关键点不是你设置波特率的问题,是时钟分频的问题,如果波特率很大的话用1分频没问题,但是如果波特率很小比如9600的话就需要设置一下分频了,我设置过16分频就成功了,还有就是可以仿真看一下,他的波特率设置是软件实现的,相当于需要算出给波特率计数器的计数值,不是硬件实现的

yicool 发表于 2021-4-15 17:54

binoo7 发表于 2021-4-15 12:45
终于有人发现了啊,这个问题我也遇到过,关键点不是你设置波特率的问题,是时钟分频的问题 ...

请问时钟分频指的是串口对应的定时器的分频 系数吗?
   stcBtCfg.enMD = BtMode2;
    stcBtCfg.enCT = BtTimer;
    Bt_Init(TIM1, &stcBtCfg);//调用basetimer1设置函数产生波特率
    Bt_ARRSet(TIM1,timer);
    Bt_Cnt16Set(TIM1,timer);
    Bt_Run(TIM1);

定时器设置只有这些 没发现分频怎么设置?
能分享这个怎么配置吗?我想要设置115200的波特率

zouzichun520 发表于 2021-4-20 15:47

yicool 发表于 2021-4-15 17:54
请问时钟分频指的是串口对应的定时器的分频 系数吗?
   stcBtCfg.enMD = BtMode2;
    stcBtCfg.enCT...

哥们,我试验过华大005如果用内部晶振跑115200波特率会导致误码率很大,唯一办法是挂外部32M晶振

martinhu 发表于 2021-4-20 16:20

你要计算当前系统时钟,是否支持你所需要的波特率。如果使用内部时钟RCH,只有RCH24M的双波特率设置才支持115200……
MCU不是计算机,需要考虑时钟,不是什么波特率什么设置都可以。

kxsi 发表于 2021-5-11 20:31

是不是有干扰啊

nawu 发表于 2021-5-11 20:32

这个是不是一个bug啊

qcliu 发表于 2021-5-11 20:32

异常的表现是什么呢

tfqi 发表于 2021-5-11 20:32

用示波器看看波特率是多少

wiba 发表于 2021-5-11 20:33

会不会是时钟配置的问题啊
页: [1]
查看完整版本: HC32F005 SDK串口例子设置9600正常115200异常