打印
[STM8]

stm8s103k3 使用250000波特率接收卡死

[复制链接]
3524|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hoverxx|  楼主 | 2014-3-29 11:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hoverxx 于 2014-3-29 12:06 编辑

stm8s103k3 使用250000波特率接收卡死
波特率调低128000则没有问题,使用250K时无论怎么清中断位都没用
看了下数据手册,说能支持2.5MBIT/S的速率,怎么会这样的呢

    UART1_DeInit();
    /* Configure the UART1 */
    UART1_Init(        (uint32_t)115200,
                                UART1_WORDLENGTH_9D,
                                UART1_STOPBITS_1,
                                UART1_PARITY_NO,
                                UART1_SYNCMODE_CLOCK_DISABLE,
                                UART1_MODE_RX_ENABLE);
                               
    /* Enable UART1 Transmit interrupt*/
    UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);       
       
    UART1_Cmd(ENABLE);
沙发
desertsailor| | 2014-3-29 12:35 | 只看该作者
2.5M太高了,单片机处理不过来,手册上标明了分频因子UART_DIV至少为16,也就是说单片机工作在16M晶振的情况下,手册推荐最大串口波特率为16M/16=1M

使用特权

评论回复
板凳
hoverxx|  楼主 | 2014-3-29 13:02 | 只看该作者
本帖最后由 hoverxx 于 2014-3-29 13:05 编辑
desertsailor 发表于 2014-3-29 12:35
2.5M太高了,单片机处理不过来,手册上标明了分频因子UART_DIV至少为16,也就是说单片机工作在16M晶振的情况 ...


我的这个是250K,16M/250K=64;是大于16的了

现在的问题的它一直处于中断循环中,无论怎么清寄存器都没用

使用特权

评论回复
地板
desertsailor| | 2014-3-29 13:27 | 只看该作者
本帖最后由 desertsailor 于 2014-3-29 13:29 编辑

本身进出中断压栈出栈就需要一定时间,如果中断程序再多几条语句就要占用更长的时间,单片机刚处理完串口中断事件或者还没处理完串口中断事件新的中断又来了就会出现你的那种情况。
所以解决办法是,如果串口波特率设置得高了或者数据量大的情况下不要用中断模式接收,用查询的方式接收数据。

使用特权

评论回复
5
liang5319| | 2014-3-29 22:52 | 只看该作者
中断里东西还没执行完,又一个中断来了~~~~

使用特权

评论回复
6
icecut| | 2014-3-30 07:23 | 只看该作者
同意5l,你这么说肯定是cpu处理不过来了.
用一个新工程.只留串口.测试

使用特权

评论回复
7
l4157| | 2014-3-30 13:16 | 只看该作者
250Kbps,实际约40uS处理一个字节,在16M频率下应该有600多个时钟去处理,应该是够的,估计是你的代码效率不够高或算法太复杂!

使用特权

评论回复
8
hoverxx|  楼主 | 2014-4-2 11:33 | 只看该作者
已解决,
进入中断后最后才清中断
读完UART1->DR后
才清中断
UART1->SR &= ~(1<<5);
()

使用特权

评论回复
9
l4157| | 2014-4-2 13:51 | 只看该作者
hoverxx 发表于 2014-4-2 11:33
已解决,
进入中断后最后才清中断
读完UART1->DR后

好样的,解决了问题来分享!

使用特权

评论回复
10
牛皮皮| | 2015-5-17 18:27 | 只看该作者
不明觉厉~

使用特权

评论回复
11
qq226394394| | 2015-9-17 16:55 | 只看该作者
l4157 发表于 2014-3-30 13:16
250Kbps,实际约40uS处理一个字节,在16M频率下应该有600多个时钟去处理,应该是够的,估计是你的代码效率 ...

250kbps   4us/bit

使用特权

评论回复
12
l4157| | 2015-11-2 10:25 | 只看该作者

对,加上起始位校验位啥的,差不多一个字节10bit,所以一个字节要40uS...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

13

帖子

0

粉丝