STM32F103写出电脑串口发送指令“1111”, 单片机串口发送当前所有任务状态; 电脑串口发送指令“2222”,单片机串口发送当前CPU的使用率;
时间: 2024-10-25 19:14:43 浏览: 23
STM32串口1发送中文或英文指令控制单片机LED灯
在STM32F103单片机上实现通过串口按照指令发送相应信息,需要一些步骤:
1. **初始化串口通信**:首先,你需要配置STM32F103的串口,比如USART1或USART2,设置波特率、数据位、停止位以及校验模式。
```c
// 初始化USART1
void USART_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// ... (配置GPIO用于TX/RX引脚)
USART_InitStructure.USART_BaudRate = 9600; // 设置串口速率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
HAL_UART_Init(&huart1); // 使用HAL库初始化串口
}
```
2. **处理命令解析**:在接收函数中,你可以读取串口接收到的数据,然后解析指令。例如,可以使用while循环比较接收到的每个字符是否匹配"1111"或"2222"。
```c
void USART_CmdHandler(uint8_t *cmd) {
if (!strcmp((char*)cmd, "1111")) {
// 发送任务状态
// ... (编写发送任务状态的函数并调用)
} else if (!strcmp((char*)cmd, "2222")) {
// 获取CPU使用率
float cpuUsage = GetCPUUsage();
// 将浮点数转换成字符串并发送
char usageStr[10];
sprintf(usageStr, "%f", cpuUsage);
// ... (发送字符串到串口)
}
}
```
3. **发送数据**:完成指令对应的计算后,将结果转化为适当的字符串,再通过`HAL_UART_Transmit`函数发送。
```c
void SendTaskStatusOrCPUUsage(float usage) {
char data[10];
sprintf(data, "%g", usage);
HAL_UART_Transmit(&huart1, (uint8_t*)data, strlen(data), HAL_MAX_DELAY);
}
```
记得在主循环中不断轮询串口接收,并调用相应的函数处理命令。
阅读全文