测试串口usart1的printf输出。
一、硬件部分
1.1、电路图串口部分
板载仿真器上的虚拟串口连接到开发板的PE5和PE6引脚。
1.2、串口端口映射
二、程序部分
2.1、usart.c
- #include "main.h"
- #include "usart/usart.h"
- UART_HandleTypeDef g_usart1_handle;
- int fputc(int ch, FILE *f)
- {
- while ((USART_UX->ISR & 0X40) == 0);
- USART_UX->TDR = (uint8_t)ch;
- return ch;
- }
- void usart_init(uint32_t baudrate)
- {
- GPIO_InitTypeDef gpio_init_struct;
-
- USART_UX_CLK_ENABLE();
- USART_TX_GPIO_CLK_ENABLE();
- USART_RX_GPIO_CLK_ENABLE();
- gpio_init_struct.Pin = USART_TX_GPIO_PIN;
- gpio_init_struct.Mode = GPIO_MODE_AF_PP;
- gpio_init_struct.Pull = GPIO_PULLUP;
- gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
- gpio_init_struct.Alternate = USART_TX_GPIO_AF;
- HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct);
- gpio_init_struct.Pin = USART_RX_GPIO_PIN;
- gpio_init_struct.Alternate = USART_RX_GPIO_AF;
- HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct);
- g_usart1_handle.Instance = USART_UX;
- g_usart1_handle.Init.BaudRate = baudrate;
- g_usart1_handle.Init.WordLength = UART_WORDLENGTH_8B;
- g_usart1_handle.Init.StopBits = UART_STOPBITS_1;
- g_usart1_handle.Init.Parity = UART_PARITY_NONE;
- g_usart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- g_usart1_handle.Init.Mode = UART_MODE_TX_RX;
- HAL_UART_Init(&g_usart1_handle);
-
- }
复制代码
2.2、usart.h
- #ifndef _USART_H
- #define _USART_H
- #include "stdio.h"
- #define USART_TX_GPIO_PORT GPIOE
- #define USART_TX_GPIO_PIN GPIO_PIN_5
- #define USART_TX_GPIO_AF GPIO_AF7_USART1
- #define USART_TX_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOE_CLK_ENABLE(); }while(0)
- #define USART_RX_GPIO_PORT GPIOE
- #define USART_RX_GPIO_PIN GPIO_PIN_6
- #define USART_RX_GPIO_AF GPIO_AF7_USART1
- #define USART_RX_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOE_CLK_ENABLE(); }while(0)
- #define USART_UX USART1
- #define USART_UX_CLK_ENABLE() do{ __HAL_RCC_USART1_CLK_ENABLE(); }while(0)
- void usart_init(uint32_t baudrate);
- #endif
复制代码
2.3、main.c
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* Configure the peripherals common clocks */
- PeriphCommonClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- // MX_GPIO_Init();
- // MX_ADC1_Init();
- // MX_CSI_Init();
- // MX_I2C1_Init();
- // MX_I2C2_Init();
- // MX_ICACHE_Init();
- // MX_MDF1_Init();
- // MX_SAI1_Init();
- // MX_SDMMC2_SD_Init();
- // MX_UCPD1_Init();
- // MX_USART1_UART_Init();
- // MX_USB1_OTG_HS_USB_Init();
- // MX_USB2_OTG_HS_HCD_Init();
- // MX_XSPI1_Init();
- // MX_XSPI2_Init();
- /* USER CODE BEGIN 2 */
- usart_init(115200);
- init_led();
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- printf(" usart1 printf test! \r\n");
- led1_tog();
- led2_tog();
- //HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
- //HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
- /* Insert delay 200 ms */
- HAL_Delay(200);
- }
- /* USER CODE END 3 */
- }
复制代码
三、运行结果
仿真运行后,串口输出
四、附件
源代码:
stm32n6570_cubemx_prj_printf.rar
(6.78 MB, 下载次数: 7)
|