stm8s105 uart设置1M波特率乱码
芯片是stm8s105,外部晶振16M,使用库函数开发,上位机支持1M波特率,设置波特率1M的时候 输出为乱码,波特率最高设置到921.6Kbps都正常,设置成1M就会乱码
请问这种情况一般问题会在哪里?
谢谢
你的串口是否支持这么高波特率,然后用示波器或者逻辑分析仪抓一下波形,看看时序是否出错,可能是波特率过高,误差超过允许范围所以乱码 外部晶振是24M,
时钟初始化是
void InitClock(void)
{
CLK_DeInit(); // 初始化时钟
CLK_HSICmd(ENABLE); // 使能内部高速晶振
while(SET != CLK_GetFlagStatus(CLK_FLAG_HSIRDY)); // 测试内部高速晶振位是不是使能
CLK_HSIPrescalerConfig(CLK_PRESCALER_CPUDIV1); // 内部时钟预分频器,对内部16M时钟不分频
CLK_ClockSwitchCmd(ENABLE); // 使能时钟切换功能
// 时钟切换
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
}
串口初始化是
UART2_Init((u32)1000000, UART2_WORDLENGTH_8D, UART2_STOPBITS_1,
UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE,
UART2_MODE_TXRX_ENABLE);
用的是USB转串口,能够支持1M的波特率,在其他板子上试过的。
现象是程序设置1M波特率,电脑接受就是乱码,如果把程序设置成0.9M的波特率,电脑还是用1M的接收,就不会乱码了。
换过16M 20M 22.1185M 24M的晶振,也换过其他的最小系统板,都是这样的问题
不知道怎么回事了,现在是先设置成0.9M的波特率用着 估计还是寄存器配置问题 终于找出来原因了,买了个简单的逻辑分析仪测了一下,1M波特率的数据是正确的,最后找出来原因是USB转TTL的小板子的问题,换了一个支持更高分辨率的usb转TTL就行了
fitsir 发表于 2015-10-21 23:12
终于找出来原因了,买了个简单的逻辑分析仪测了一下,1M波特率的数据是正确的,最后找出来原因是USB转TTL的 ...
具体是什么型号的芯片可以支持1M的波特率啊 ?? 8S105实现1M应该没问题,不过楼主说跑24M可能有点悬。
波特率高时要注意外围线路器件配合好。 xmshao 发表于 2016-5-17 16:11
8S105实现1M应该没问题,不过楼主说跑24M可能有点悬。
波特率高时要注意外围线路器件配合好。 ...
最后找出来原因是USB转TTL的小板子的问题,换了一个支持更高分辨率的usb转TTL就行了
请问这个usb转TTL的芯片是什么型号啊 ????? 105手册上说最大16M HSE,24M也可以正常用?:o
页:
[1]