完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F746-迪斯科板;Windows 10,STM32CubeIDE 1.7.0,空项目,只有 CMSIS,没有别的。
为了学习,我正在编写一个基于中断的 UART 传输驱动程序,在寄存器上带有环形缓冲区(没有 DMA,稍后会在我提高一些智商后出现)。阅读数据表、参考手册和编程手册(针对 NVIC),我想我理解了这些东西。驱动程序还没有准备好测试,它正在进行中,虽然设置已经完成。我想确保我正确理解了这些内容。 关键点: 请参阅所附图片,一流的绘画技巧来解释我的 uart tx 环形缓冲区的工作原理。 书面形式:我有一个数组,用作传输的环形缓冲区。有一个指向当前正在发送的元素的指针和“在最后一个元素之后”的指针。当我到达数组的最后一个元素时,我移动到数组的开头。因此,环形缓冲区。 现在,想象一下我已经在发送一些东西了。那时我有另一个发送请求。我所做的是检查我的环形缓冲区有多少可用空间(缓冲区大小减去仍在等待发送的字符数),如果它适合,它位于我将新数据写入缓冲区并相应地移动到最后一个指针之后. 基本上,将其附加到已经等待发送的内容。 然而,这让我开始思考。由于在设置传输完成标志之前我有一个完整的 UART 帧将下一个字节加载到发送寄存器(传输数据寄存器,USART1->TDR),我想我可以在加载新的时禁用 UART 中断(传输,更具体地说是 TXE)数据放入缓冲区环形数组。但我仍然希望它们成为“待定”,这样当我在数据加载到缓冲区后重新激活中断时,程序将看到这些中断发生并处理它们(所以如果我需要 1 个 UART 位时间将数据复制到缓冲区,在第 2 位,MCU 会将下一个字节加载到 USART1->TDR)。 这里有几件事需要考虑:
正如所承诺的,这是我对我正在做的事情的粗略视觉表示。对于这个问题来说并不是那么重要,但仍然如此。 另外,问题 2。没有直接关系,但在我讨论的时候。如果我有 UART 触发中断,但在 NVIC 中禁用了 UART 中断,它会在我在 NVIC 中启用中断后触发吗? 此外,如果您有心情,请随时批评我的算法,随时接受反馈,尤其是考虑到我是开发人员的幼虫。 |
|
相关推荐
1个回答
|
|
这意味着一旦中断触发,我需要确保清除 TXE
是的,您需要清除中断或禁用它。 UART模式下不能用clear flag清除TXE标志,只能写TDR清除。 另外,问题 2。没有直接关系,但我正在研究它。如果我有 UART 触发中断,但在 NVIC 中禁用了 UART 中断,它会在我在 NVIC 中启用中断后触发吗? |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2642 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3611 浏览 6 评论
5989 浏览 21 评论
939浏览 4评论
1316浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
584浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1303浏览 3评论
1361浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 14:36 , Processed in 1.275918 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号