从STM32C5 开发板原理图中可以发现STM32C5将Uart2
连接到STM32F723中
首先在stm32cubeMX32中完成Uart2串口配置。
生成MDK5.40的工程,并打开,其生成的main.c文件还是与之前生成工程一样。需要手动添加代码。
mx_usart2_uart_init()函数在mx_usart2.c中实现。实现了Uart2串口初始化和PA2和PA3--IO的初始化,并开中断。
hal_uart_handle_t *mx_usart2_uart_init(void)
{
hal_uart_config_t uart_config;
/* Basic configuration */
if (HAL_UART_Init(&hUSART2, HAL_UART2) != HAL_OK)
{
return NULL;
}
HAL_RCC_USART2_EnableClock();
if (HAL_RCC_USART2_SetKernelClkSource(HAL_RCC_USART2_CLK_SRC_PCLK1) != HAL_OK)
{
return NULL;
}
uart_config.baud_rate = 115200;
uart_config.clock_prescaler = HAL_UART_PRESCALER_DIV1;
uart_config.word_length = HAL_UART_WORD_LENGTH_8_BIT;
uart_config.stop_bits = HAL_UART_STOP_BIT_1;
uart_config.parity = HAL_UART_PARITY_NONE;
uart_config.direction = HAL_UART_DIRECTION_TX_RX;
uart_config.hw_flow_ctl = HAL_UART_HW_CONTROL_NONE;
uart_config.oversampling = HAL_UART_OVERSAMPLING_16;
uart_config.one_bit_sampling = HAL_UART_ONE_BIT_SAMPLE_DISABLE;
if (HAL_UART_SetConfig(&hUSART2, &uart_config) != HAL_OK)
{
return NULL;
}
/* ### USART2 GPIO Configuration ########################### */
/* GPIO Clocks activation */
HAL_RCC_GPIOA_EnableClock();
hal_gpio_config_t gpio_config;
/**
[GPIO Pin] ------> [Signal Name] ------> [Labels]
PA3 ------> USART2_RX ------> PA3
PA2 ------> USART2_TX ------> PA2
**/
gpio_config.mode = HAL_GPIO_MODE_ALTERNATE;
gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
gpio_config.pull = HAL_GPIO_PULL_NO;
gpio_config.speed = HAL_GPIO_SPEED_FREQ_LOW;
gpio_config.alternate = HAL_GPIO_AF_7;
HAL_GPIO_Init(HAL_GPIOA, PA3_PIN | PA2_PIN, &gpio_config);
/* Enable interrupt */
HAL_CORTEX_NVIC_SetPriority(USART2_IRQn, HAL_CORTEX_NVIC_PREEMP_PRIORITY_0, HAL_CORTEX_NVIC_SUB_PRIORITY_0);
HAL_CORTEX_NVIC_EnableIRQ(USART2_IRQn);
return &hUSART2;
}
在main()函数中,首先开启PA端口和Uart串口时钟
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
huart2 = mx_usart2_uart_init();
if (huart2 == NULL)
{
while (1); // ?????,??
}
其次,开启Uart中断接收
HAL_UART_Receive_IT(huart2, &rx_byte, 1);
实现中断接收回调函数如下,接收的数据再通过串口回发。
void HAL_UART_RxCpltCallback(hal_uart_handle_t *huart, uint32_t size_byte, hal_uart_rx_event_types_t rx_event)
{
if (huart->instance == USART2)
{
HAL_UART_Transmit(huart, &rx_byte, 1, 100);
HAL_UART_Receive_IT(huart, &rx_byte, 1);
}
}
还需要实现uart2重定义
int fputc(int ch, FILE *f)
{
uint8_t c = (uint8_t)ch;
if (huart2 != NULL)
{
HAL_UART_Transmit(huart2, &c, 1, 100);
}
return ch;
}
以上代码的MDK5工程文件为:
stm32c5_Uart.zip
(17.23 MB, 下载次数: 0)
以上代码实现数据收发如下图
|