1.直接采用DMA+空闲中断 来及时接受串口数据 能够解决大部分的接受数据
2.针对某些模块 空闲中断不能解决,原因是传输数据过程中,模块传递的某些字节超过了空闲中断的时间,导致会接受不完全
因此采用串口超时中断+DMA ,串口超时可以设置超时的字节数,假如设置三个字节超时。意味着当串口寄存器超过了三个字节的时间没有数据,则默认传输完成,然后在超时中断里面,第一步关闭DMA,获取已传输的长度,处理已接收到的正常数据并处理,继续开启DMA 等待下一次接受
3.回调函数的使用,可以避免 建立一个全局变量,然后在大循环中判定全局变量的状态,这样功能模块的移植性增强
使用要点: 两个.C文件 x.c和 y.c 函数V是y.c文件里面的函数
在x.c中
1.定义一个函数指针类型 2.创建一个函数指针变量 p 3. 创建一个注册函数(作用是 把需要调用的函数V对应的指针,赋值给p)
4.创建一个调用函数 S内容是 判定P是否被注册,如果被注册,则直接跳转函数V
5.注册函数实质就是把需要调用的函数V的指针赋值给了P,写好一个通用的调用函数S ,假如要移植,只需要修改y.c文件里的函数V即可,这样就减少了x.c文件的修改
标签:DMA,函数,中断,对接,功能模块,串口,超时,心得 From: https://www.cnblogs.com/mackcheng/p/17183219.html