串口中断的实现机制

最基本的串口中断的实现:需要直接调用cpu

发送接收的时候都包含两个寄存器

实现的机制,hal库已经基本完成,只需要调用相应地It中断函数和最后实现的逻辑写在对应的回调函数中即可。

如:发送时:

        1.发送数据寄存器发送移位寄存器

       接收时:

        2.接收数据寄存器接收移位寄存器

当实现中断的时候,举例  如在发送时,先将数据放入发送数据寄存器,再串行输入到发送移位寄存器,按位传输,当,发送移位寄存器空的时候就会产生发送数据寄存器空中断,调度cpu来将数据寄存器的值传递到移位寄存器中去。

在接收时是同样的。

      只不过在接收时,改成了接收数据寄存器非空时,产生一次接收数据寄存器非空中断,调度cpu过来把接收移位寄存器里的数据放到接收数据寄存器中去。

串口中断的实现机制再详解:DMA模式:

DMA模式下的串口中断实现:

DMA:直接内存访问,相当于cpu直接操作内存之间的一个媒介,减少了cpu的直接调用,而选择用中间的媒介cpu来完成发射中断信号这一机制

作用:完成数据的搬运,这里完成的是在发送数据寄存器中将数据搬运到发送移位寄存器中去,减少了cpu完成此搬运过程造成的频繁切换进程调度。

在cubemx里创建好DMA通道就可以直接使用了:

 

接收不定长数据:

实现的机制::重点是使用了一种中断:::串口空闲中断

                   串口接收从忙碌转为空闲时会触发此中断

 hal库也封装好了:三种模式:阻塞、中断、DMA



 实现的回调函数改变了:

 这里的回调函数都是_weak前缀的函数,复制其定义放在main.c中重新进行定义

实现不定长数据收发步骤:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值