以ON OFF作为帧头和帧尾,在串口发送字符串单片机接收并在屏幕显示,并且实现发送字符串ON ,控制灯亮,发送字符串OFF,控制灯灭。stm32 代码示例,不使用HAL
时间: 2024-12-13 10:16:47 浏览: 25
在STM32单片机上实现这个功能,我们需要利用UART(通用异步收发器)来进行串行通信,发送ON/OFF帧并读取数据。首先,你需要配置串口初始化,然后编写发送和接收函数。这里是一个简单的C语言示例,不使用HAL库:
```c
#include "stm32f10x.h"
#include "USART.h"
// 定义帧头和帧尾
#define ON_FRAME "\r\nON"
#define OFF_FRAME "\r\nOFF"
// 定义发送和接收函数
void send_string(char *str) {
while (*str != '\0') {
// 发送每个字符
USART_SendData(USART1, (uint8_t)*str++);
// 检查是否发送完帧头
if (!strcmp(str, ON_FRAME)) {
// 发送帧尾
USART_SendData(USART1, (uint8_t)'\n');
break;
}
}
}
void receive_string() {
uint8_t buffer[40];
uint8_t i = 0;
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) {}
buffer[i++] = USART_ReceiveData(USART1);
// 循环直到接收到帧尾
while (buffer[i] != '\n' && i < sizeof(buffer)) {
buffer[i++] = USART_ReceiveData(USART1);
}
buffer[i] = '\0'; // 结束字符串
// 判断接收到的是ON还是OFF
if (strcmp((char*)buffer, ON_FRAME) == 0) {
// 执行相应操作,如点亮LED
led_on();
} else if (strcmp((char*)buffer, OFF_FRAME) == 0) {
// 执行相应操作,如关闭LED
led_off();
}
}
// LED开关函数,这里仅作示意,实际应用需要连接硬件
void led_on() {
// 省略LED开启的实际操作
}
void led_off() {
// 省略LED关闭的实际操作
}
int main(void) {
// 初始化串口1
USART_Init(USART1);
while (1) {
// 发送ON命令
send_string(ON_FRAME);
// 接收并处理命令
receive_string();
// 发送OFF命令
send_string(OFF_FRAME);
// 接收并处理命令
receive_string();
}
return 0;
}
```
阅读全文