stm32cubemx串口收发数字
时间: 2025-01-03 12:33:47 浏览: 18
### STM32CubeMX 实现 UART 发送接收数字
#### 配置 CubeMX 工具
在使用 STM32CubeMX 进行项目初始化时,需先创建一个新的工程并选择合适的微控制器型号。对于 UART 的配置,在左侧的外设列表中找到 USART 或者 UART 外设,并将其启用。
设置参数如波特率、数据位数、停止位以及校验方式等以适应具体的通讯需求[^1]。
#### 编写发送和接收函数
完成硬件抽象层 (HAL) 库的基础配置之后,可以编写用于发送和接收字符或字符串的应用程序代码。下面是一个简单的例子来展示如何通过 UART 接口发送和接收到单个 ASCII 字符表示的数字:
```c
#include "main.h"
UART_HandleTypeDef huart2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
char receivedChar;
while(1){
// 等待直到接收到一个字符
if(HAL_UART_Receive(&huart2, (uint8_t*)&receivedChar, 1, HAL_MAX_DELAY)== HAL_OK){
// 将接收到的数据回传给终端设备显示出来
HAL_UART_Transmit(&huart2,(uint8_t*)&receivedChar ,1, HAL_MAX_DELAY);
// 如果是'0'- '9', 则转换成对应的整数值再返回
if(receivedChar >= '0'&& receivedChar <= '9'){
int num = receivedChar - '0';
// 转换成ASCII码形式再次发出
char sendBuffer[2];
sprintf(sendBuffer,"%d",num);
HAL_UART_Transmit(&huart2, (uint8_t*)sendBuffer,strlen(sendBuffer), HAL_MAX_DELAY);
}
}
}
}
// 初始化USART2
static void MX_USART2_UART_Init(void){
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200; // 设置波特率为115200bps
huart2.Init.WordLength = UART_WORDLENGTH_8B;// 数据长度为8bit
huart2.Init.StopBits = UART_STOPBITS_1; // 单停止位
huart2.Init.Parity = UART_PARITY_NONE; // 不使用奇偶校验
huart2.Init.Mode = UART_MODE_TX_RX; // 启用发射器和接收器
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;// 关闭流控制
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK){ // 初始化串口
Error_Handler(); // 错误处理
}
}
```
上述代码实现了基本的功能:当从计算机或其他外部装置输入任意一位阿拉伯数字(即‘0’到‘9’),该程序会识别这个字符并将它作为相应的十进制数值重新发送回去;如果不是这些特定范围内的字符,则只简单地反射回来而不做任何改变。
为了提高效率和支持更复杂的数据交换场景,还可以考虑采用中断驱动的方式来进行异步读取操作或是利用DMA技术实现批量传输功能[^2][^3]。
阅读全文