硬件支持高达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接口也会引起一些延迟。
硬件支持高达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接口也会引起一些延迟。
举报