stm32 CUBEMX使用pa0、pa1引脚开启usart1串口并实现打印函数的全部流程
时间: 2024-04-30 10:19:01 浏览: 14
1. 打开 STM32 CUBEMX 软件,选择对应的芯片型号和工程路径。
2. 在 Pinout 视图中选择需要使用的引脚,例如 PA0 和 PA1 作为 USART1 的 RX 和 TX 引脚。将引脚设置为 Alternate function 模式,并选择对应的串口功能。
3. 在 Configuration 视图中配置 USART1 的波特率、数据位、停止位、校验位等参数。同时,开启 USART1 的 DMA 功能,以提高数据传输效率。
4. 在 Code Generator 视图中选择使用 HAL 库,并生成代码。
5. 在生成的代码中,找到 `main.c` 文件,添加以下代码:
```c
#include "stdio.h"
#include "stm32f4xx_hal.h"
#include "usart.h"
void SystemClock_Config(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
printf("Hello World!\n");
while (1)
{
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
```
6. 在 `main.c` 文件中添加 `stdio.h` 头文件,以便使用标准输入输出函数。同时,在 `usart.h` 文件中添加 `printf()` 函数的声明:
```c
int __io_putchar(int ch);
#define printf(...) do { \
char buffer[256]; \
int size = sprintf(buffer, __VA_ARGS__); \
HAL_UART_Transmit_DMA(&huart1, (uint8_t*)buffer, size); \
} while (0)
```
7. 编译并下载程序到开发板上,即可在串口调试助手中看到输出的 "Hello World!"。