• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32的串口中断是怎么接受字节的

huihui163 2017-10-10 浏览量:2548
stm32的串口中断是怎么接受字节的,中断一次就接受一个字节吗
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 对于STM32的串口的接收中断,每次接收一个字节,用户需要在取出数据时把中断标志位清0,之后会接收下一个字节,再次进入中断。可以用移位的操作将接收到的数据存放在一个buffer中,然后再在主程序里判断这个buffer内的数据是否符合需求,在做轮询处理。
    • 发布于 2017-10-10
    • 举报
    • 评论 9
    • 0
    • 0
huihui163 回复了 赤心木zqw:我现在有点钻牛角尖,您也回复我刚发的那个贴,能进中断但是不判断 回复
赤心木zqw 回复了 赤心木zqw:不用着急,一步一步来,调试程序:先在串口中断处打个断点,串口助手发一个字节的数据,此时程序应该进入中断断点处,检查接收到的字节是否和发送的字节一致,如果一致,再进行多个字节的传输。 回复
huihui163 回复了 赤心木zqw:用keil调试可以吗 回复
huihui163 回复了 赤心木zqw:Res =USART_ReceiveData(USART1); USART_ClearFlag(USART1,USART_FLAG_RXNE); // USART_SendData(USART1,Res); 这样就可以把接受的数据全部发送出去吗 回复
huihui163 回复了 赤心木zqw:Res =USART_ReceiveData(USART1); USART_ClearFlag(USART1,USART_FLAG_RXNE); // USART_SendData(USART1,Res); 这样就可以把接受的数据全部发送出去吗 回复
huihui163 回复了 赤心木zqw:Res =USART_ReceiveData(USART1); USART_ClearFlag(USART1,USART_FLAG_RXNE); // USART_SendData(USART1,Res); 这样就可以把接受的数据全部发送出去吗 回复
huihui163 回复了 赤心木zqw:Res =USART_ReceiveData(USART1); USART_ClearFlag(USART1,USART_FLAG_RXNE); // USART_SendData(USART1,Res); 这样就可以把接受的数据全部发送出去吗 回复
huihui163 回复了 赤心木zqw:Res =USART_ReceiveData(USART1); USART_ClearFlag(USART1,USART_FLAG_RXNE); // USART_SendData(USART1,Res); 这样就可以把接受的数据全部发送出去吗 回复
赤心木zqw 回复了 赤心木zqw:keil也可以设置断点呀,这种方式相当于接收一个字节发送一个字节了 回复

其他答案 数量:9
  • 配置RXNE中断的话,接收一个字节就会中断一次。
    • 发布于2017-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 是的,不过如果开启DMA的话,可以直接把数据放到指定位置
    • 发布于2017-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • QQ截图20171011090438.jpg


    是的。中断一次接收一个字节。从串口的硬件框图上可以看到。数据接收时先进入移位寄存器,再到RDR寄存器,并没FIFO可以缓存数据。有的接口有FIFO,所以可以设置1数据中断、半满FIFO中断、满中断等。而串口这里没有,只能一个字节中断一次。

    • 发布于2017-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 一个字节中断一次,每次中断后清中断接着收。
    • 发布于2017-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 是的,一次只接受一个字节数据,如果你发送一串数据,有5个字符,就中断五次
    • 发布于2017-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果使用HAL库,中断一次所接收的字节数是可以通过软件进行设置的。


    fdg4t5.JPG

    • 发布于2017-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断一次能收8位数,你没看程序里面的for循环?i<8嘛,不过你可以设置buffer[],收到数据放buf中,清中断,记次数,然后统一处理buf 
    • 发布于2017-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以这么说哒,一次应该是接受一个字节的
    • 发布于2017-10-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32的串口中断是怎么接受字节的