你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f207无法同时接上两个不同串口的数据

[复制链接]
bitterheart 提问时间:2023-10-16 15:01 / 未解决

stm32f207ve芯片,使用rtthread操作系统,同时使用uart2、uart4、uart5同时发送数据,下一级设备接收到数据后立马回复数据,三条数据几乎同时接收,大概率会丢失数据,往往只能收到一条数据或者没有数据,但是如果将三条数据分开回复,间隔几毫秒则能正常接收。按道理来说三个串口不是独立工作的吗?为什么会有影响呢

收藏 评论4 发布时间:2023-10-16 15:01

举报

4个回答
xmshao 回答时间:2023-10-16 15:16:43
大概率是接收不过来,尤其是基于查询或中断方式的话。你可以考虑通过DMA来接收,有机会解决当前问题。
bitterheart 回答时间:2023-10-17 08:54:45

xmshao 发表于 2023-10-16 15:16
大概率是接收不过来,尤其是基于查询或中断方式的话。你可以考虑通过DMA来接收,有机会解决当前问题。 ...

应该是,使用的中断接收

废鱼 回答时间:2023-10-17 15:23:14

中断处理中是不是有加打印或者其他的处理太多的过程?按照常规只接收数据,理论不会发生类似的问题。还有看一下中断时是否进行了现在保护操作,把现场保护操作去掉试试。

bitterheart 回答时间:2023-10-18 08:36:24

废鱼 发表于 2023-10-17 15:23
中断处理中是不是有加打印或者其他的处理太多的过程?按照常规只接收数据,理论不会发生类似的问题。还 ...

确实是,中断使用了临界区保护

void USART2_IRQHandler(void)
{
    struct stm32_uart* uart;

    uart = &uart2;

    /* enter interrupt */
    rt_interrupt_enter();
    if(USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET)
    {
        rt_hw_serial_isr(&serial2);
        /* clear interrupt */
        USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE);
    }
    if (USART_GetITStatus(uart->uart_device, USART_IT_TC) != RESET)
    {
        /* clear interrupt */
        USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
    }

    /* leave interrupt */
    rt_interrupt_leave();
}
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版