keil写一个函数返回值为串口输入的数字(stm32f407vet6,不用huart,且将代码完善可用
时间: 2024-12-23 19:12:12 浏览: 48
为了在STM32F407VET6上通过串口读取并返回一个数字,我们首先需要实现一个函数来接收字符,直到遇到换行符(\n)或非数字字符,然后解析接收到的数字。这里我们将不直接依赖`HAL_UART_Transmit`,而是使用`USART_ReceiveData`函数从硬件层面接收数据。请注意,以下代码假设您已经配置好了USART通信参数。
```c
#include "stm32f4xx_hal.h"
// 假设USART1已被初始化并配置好
static USART_HandleTypeDef UsartHandle;
int ReadSerialNumber(void) {
uint8_t buffer[10]; // 存储接收到的最多9位数字加终止符
uint8_t i = 0;
int number = 0;
while (i < sizeof(buffer)) {
if (USART_GetFlagStatus(UsartHandle, USART_FLAG_RXNE) == SET) { // 检查接收缓冲区是否有新数据
buffer[i] = USART_ReceiveData(&UsartHandle);
if (isdigit(buffer[i]) || buffer[i] == '\n') { // 如果是数字字符或换行符
if (number > 0 && buffer[i] != '0') { // 当前已有一个有效数字,后续只允许数字或换行
break;
}
number = buffer[i] - '0'; // 转换为十进制数值
} else {
if (number > 0) { // 如果接收到非数字字符但之前有数字,结束循环
break;
}
}
i++;
} else {
// 没有新数据时稍作延时等待
HAL_Delay(1);
}
}
// 如果找到换行符,结束数字接收
if (buffer[i - 1] == '\n') {
i--;
}
return number; // 返回接收到的数字
}
```
要使用这个函数,您需要先连接串口设备并设置正确的波特率、校验方式等参数。然后在适当的时候调用`ReadSerialNumber()`函数。
阅读全文
相关推荐

















