最近,我在一个项目中使用了国民技术的N32系列MCU,主要任务是实现串口通信来传输数据。我使用的是N32G455系列MCU,并通过UART接口来发送和接收数据。这里我将分享我的完整代码,展示如何配置UART,并通过中断处理接收数据。
硬件平台:
开发工具:- Keil uVision
- CubeMX生成初始化代码
下面是完整的代码:
- #include "main.h"
- #include "usart.h"
- #include "gpio.h"
- #include "string.h"
- // 定义接收数据的变量
- uint8_t RxData = 0;
- // USART1初始化函数,由CubeMX生成
- void MX_USART1_UART_Init(void)
- {
- huart1.Instance = USART1;
- huart1.Init.BaudRate = 115200;
- huart1.Init.WordLength = UART_WORDLENGTH_8B;
- huart1.Init.StopBits = UART_STOPBITS_1;
- huart1.Init.Parity = UART_PARITY_NONE;
- huart1.Init.Mode = UART_MODE_TX_RX;
- huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;
- if (HAL_UART_Init(&huart1) != HAL_OK)
- {
- Error_Handler();
- }
- }
- // 串口发送字符串函数
- void UART_SendString(char *str)
- {
- HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);
- }
- // UART接收完成中断回调函数
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if (huart->Instance == USART1)
- {
- // 回显收到的字符
- HAL_UART_Transmit(&huart1, &RxData, 1, HAL_MAX_DELAY);
- // 再次启动接收
- HAL_UART_Receive_IT(&huart1, &RxData, 1);
- }
- }
- int main(void)
- {
- // 初始化硬件抽象层
- HAL_Init();
- // 系统时钟配置
- SystemClock_Config();
- // 初始化GPIO
- MX_GPIO_Init();
- // 初始化USART1
- MX_USART1_UART_Init();
- // 发送调试信息
- UART_SendString("Hello from N32 MCU!\r\n");
- // 开始接收第一个字符
- HAL_UART_Receive_IT(&huart1, &RxData, 1);
- // 主循环
- while (1)
- {
- // 在这里执行其他任务
- }
- }
- // 错误处理函数
- void Error_Handler(void)
- {
- while(1)
- {
- // 错误处理
- }
- }
代码说明:- 通过 MX_USART1_UART_Init() 函数初始化UART,设置波特率为115200,8位数据位,1位停止位,无校验。
- UART_SendString() 函数用于发送字符串到PC或其他设备。
- HAL_UART_RxCpltCallback() 是中断回调函数,每当接收到数据时,执行相应操作(此处为回显接收的数据)。
- 在主函数 main() 中,初始化硬件并开始UART接收,主循环中可以执行其他任务。
希望这段代码对你有帮助!如果你在使用国民技术的MCU时遇到任何问题,欢迎在下方留言讨论!
|