完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在为包含FT2232H UART < - > USB转换器的自定义STM32F7板设置项目后,我在发送(和接收数据)时遇到了多个问题。我使用的代码主要由CubeMX生成,位于帖子的末尾。 首先,根据数据表,FT2232H和STM32F7的波特率至少应为12M波特,我无法让波特率高于标准115200。对于FT2232H,我正在工作,因为我从终端(USB端)发送一些字符,并在我短接FT2232H输出端的RX和TX引脚时收回了字符。 其次是我不能连续多次调用sendUART()函数,为什么DMA Fifo不用于存储我想要发送的东西? 还有什么方法可以回显所有收到的数据,但是利用了fifo,这样当没有及时轮询数据时,没有数据丢失?
|
|
相关推荐
3个回答
|
|
硬件支持高达27 Mbit的速度(嗯,你没有告诉你的部件号,我正在看F756数据表),但据说stm32f7xx_hal_uart.h,HAL不会接受高于9M的速度
#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) < 9000001) 此外,它取决于系统时钟速度,在默认配置中,当您不触摸STM32CubeMX中的时钟配置选项卡时,一切都在16 MHz内部HSI时钟上运行。这意味着在您使用时最多为1 MbitUART_OVERSAMPLING_16,如果切换到最多则为两倍UART_OVERSAMPLING_8(但之后您将失去噪声检测)。 虽然有一个16字节的DMA FIFO,但软件无法访问它。没有办法只为正在进行的DMA传输添加更多数据。HAL什么都不做,只是从调用者提供的缓冲区地址开始DMA传输。 您必须等到传输完成或暂停DMA,然后等待FIFO为空。您当然可以自己分配缓冲区,在数据到来时添加数据,并在完成后重新启动DMA并在缓冲区中有新数据。 在我看来,你不能在每个收到的角色上同时拥有DMA和中断。至少,ISR状态寄存器值是无用的,中断处理程序将无法决定做什么。读它甚至可能会干扰DMA传输。因此,您必须选择一个。 使用DMA将数据放入缓冲区(或两个),然后可以在空闲循环或定时器中断中定期轮询传输计数器。没有立即响应,但它可能根本不重要,因为USB接口也会引起一些延迟。 |
|
|
|
感谢你的回答。我配置了时钟,UART在200Mhz SYSCLK上运行,因此根据CubeMX应该有理论上的最大值。波特率为12.5M,过采样设置为16个样本。
|
|
|
|
如果你将UART时钟源设置为200MHz SYSCLK(你在哪里做?它不在上面的代码中),那么你得到12.5M,对,但这不是12M,FTDI部分正在运行。当其他一切都很完美时(控制器不是太热,信号很清晰,没有噪声),它有4.167%的差异,再加上它可以工作的HSI振荡器的不准确性,但是我试用192 MHz以获得更好的匹配。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 03:18 , Processed in 0.839073 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号