我在UART5上配置我的stm32f429-DISCO板以进行UART传输时遇到了一些问题。 我使用了st提供的示例项目。确切地说,版本1.7.0中的UART / UART_TwoBoards_ComDMA。 在此示例中,USART1用于圈选一个数据包。 当使用原始代码对DISCO板进行编程时,我可以在示波器上看到USART1输出消息。
另一方面,当我使用UART5尝试相同的操作时,因为USART1的引脚将在我的最终配置中被阻止,所以它将无效。
我将问题缩小到初始化过程。
HAL_UART_MspInit(huart);
此功能未将UART1-> SR中的TC和RXNE位置1,因此未配置UART5。 我知道UART1需要启用时钟,因为它可以是同步传输。
__HAL_RCC_USART1_CLK_ENABLE();
我似乎无法为UART5找到类似的功能。有人对我有想法或暗示吗?
如果此问题存在更大的问题,则以下是该示例的UART5配置的更改设置。
/* Definition for USARTx clock resources */
#define USARTx UART5
//#define USARTx_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE();
#define DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
#define USARTx_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define USARTx_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
//#define USARTx_FORCE_RESET() __HAL_RCC_USART1_FORCE_RESET()
//#define USARTx_RELEASE_RESET() __HAL_RCC_USART1_RELEASE_RESET()
/* Definition for USARTx Pins */
#define USARTx_TX_PIN GPIO_PIN_12
#define USARTx_TX_GPIO_PORT GPIOC
#define USARTx_TX_AF GPIO_AF8_UART5
#define USARTx_RX_PIN GPIO_PIN_2
#define USARTx_RX_GPIO_PORT GPIOD
#define USARTx_RX_AF GPIO_AF8_UART5
/* Definition for USARTx's DMA */
#define USARTx_TX_DMA_CHANNEL DMA_CHANNEL_4
#define USARTx_TX_DMA_STREAM DMA1_Stream7
#define USARTx_RX_DMA_CHANNEL DMA_CHANNEL_4
#define USARTx_RX_DMA_STREAM DMA1_Stream0
/* Definition for USARTx's NVIC */
#define USARTx_DMA_TX_IRQn DMA1_Stream7_IRQn
#define USARTx_DMA_RX_IRQn DMA1_Stream0_IRQn
#define USARTx_DMA_TX_IRQHandler DMA1_Stream7_IRQHandler
#define USARTx_DMA_RX_IRQHandler DMA1_Stream0_IRQHandler
#define USARTx_IRQn UART5_IRQn
#define USARTx_IRQHandler UART5_IRQHandler
我很高兴有任何建议和帮助指导我朝着正确的方向前进。
感谢您的时间,
eimer
答案 0 :(得分:0)
UART5没有S,因此调用启用时钟的功能
__HAL_RCC_UART5_CLK_ENABLE();
,例如那里:Receiving data from 2 UARTs, STM32F4-Discovery, HAL drivers