完善资料让更多小伙伴认识你,还能领取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 中启用中断后触发吗? |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1453 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1502 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3649 浏览 1 评论
3842 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2461 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
727浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
661浏览 5评论
710浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
941浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
745浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 00:16 , Processed in 0.678916 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4155