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);
请问为什么出现数据不对呢?
应该如何配置
终于有人发现了啊,这个问题我也遇到过,关键点不是你设置波特率的问题,是时钟分频的问题,如果波特率很大的话用1分频没问题,但是如果波特率很小比如9600的话就需要设置一下分频了,我设置过16分频就成功了,还有就是可以仿真看一下,他的波特率设置是软件实现的,相当于需要算出给波特率计数器的计数值,不是硬件实现的 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的波特率 yicool 发表于 2021-4-15 17:54
请问时钟分频指的是串口对应的定时器的分频 系数吗?
stcBtCfg.enMD = BtMode2;
stcBtCfg.enCT...
哥们,我试验过华大005如果用内部晶振跑115200波特率会导致误码率很大,唯一办法是挂外部32M晶振 你要计算当前系统时钟,是否支持你所需要的波特率。如果使用内部时钟RCH,只有RCH24M的双波特率设置才支持115200……
MCU不是计算机,需要考虑时钟,不是什么波特率什么设置都可以。
是不是有干扰啊 这个是不是一个bug啊 异常的表现是什么呢 用示波器看看波特率是多少 会不会是时钟配置的问题啊
页:
[1]