fitsir 发表于 2015-10-14 10:49:32

stm8s105 uart设置1M波特率乱码

芯片是stm8s105,外部晶振16M,使用库函数开发,上位机支持1M波特率,设置波特率1M的时候 输出为乱码,
波特率最高设置到921.6Kbps都正常,设置成1M就会乱码

请问这种情况一般问题会在哪里?

谢谢

ughbss 发表于 2015-10-14 16:57:45

你的串口是否支持这么高波特率,然后用示波器或者逻辑分析仪抓一下波形,看看时序是否出错,可能是波特率过高,误差超过允许范围所以乱码

fitsir 发表于 2015-10-18 15:29:05

外部晶振是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的波特率用着

peter001 发表于 2015-10-19 10:13:15

估计还是寄存器配置问题

fitsir 发表于 2015-10-21 23:12:32

终于找出来原因了,买了个简单的逻辑分析仪测了一下,1M波特率的数据是正确的,最后找出来原因是USB转TTL的小板子的问题,换了一个支持更高分辨率的usb转TTL就行了

hpdell 发表于 2016-5-17 15:03:26

fitsir 发表于 2015-10-21 23:12
终于找出来原因了,买了个简单的逻辑分析仪测了一下,1M波特率的数据是正确的,最后找出来原因是USB转TTL的 ...

具体是什么型号的芯片可以支持1M的波特率啊 ??

xmshao 发表于 2016-5-17 16:11:57

8S105实现1M应该没问题,不过楼主说跑24M可能有点悬。

波特率高时要注意外围线路器件配合好。

hpdell 发表于 2016-5-17 22:14:53

xmshao 发表于 2016-5-17 16:11
8S105实现1M应该没问题,不过楼主说跑24M可能有点悬。

波特率高时要注意外围线路器件配合好。 ...

最后找出来原因是USB转TTL的小板子的问题,换了一个支持更高分辨率的usb转TTL就行了

请问这个usb转TTL的芯片是什么型号啊 ?????

zcl201207 发表于 2016-5-18 23:34:24

105手册上说最大16M HSE,24M也可以正常用?:o
页: [1]
查看完整版本: stm8s105 uart设置1M波特率乱码