c - stm32F429-DISCOVERY 上的 UART5 - 未初始化

标签 c embedded stm32 uart

我在为 UART5 上的 UART 传输配置我的 stm32f429-DISCO 板时遇到了一些问题。 我使用了st提供的示例项目。确切的说是1.7.0版本的UART/UART_TwoBoards_ComDMA。 在本例中,USART1 用于环绕一个数据包。 当 DISCO 板用原始代码编程时,我可以在我的示波器上看到 USART1 输出消息。

另一方面,当我尝试用 UART5 做同样的事情时,因为 USART1 的引脚在我的最终配置中会被阻塞,所以它不会工作。

我将问题缩小到初始化过程。

HAL_UART_MspInit(huart);

该函数没有设置 UART1->SR 中的 TC 和 RXNE 位,因此 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

我很高兴收到任何能引导我朝着正确方向前进的建议和帮助。

谢谢你的时间,

艾默

最佳答案

UART5没有S,所以调用使能时钟的函数 __HAL_RCC_UART5_CLK_ENABLE();,例如那里:Receiving data from 2 UARTs, STM32F4-Discovery, HAL drivers

关于c - stm32F429-DISCOVERY 上的 UART5 - 未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31859660/

相关文章:

c - SIGTRAP 尽管没有设置断点;隐藏硬件断点?

Windows 10 - 清除 USB 枚举/驱动程序问题

iphone - 我遇到内存泄漏,负责的框架是 strdup。谁能给我一些线索?

C 从文件中读取数字到数组中

c++ - 收集2 : error: ld returned 1 exit status

c - 结构不编译?

linux - Upstart init 正在泄漏内存,你如何调试它?

linux - 如何创建和部署自定义的嵌入式 Linux 镜像

linux - 构建根问题

c - 使用 HAL 库的 STM32l100rc USB 驱动程序