学习ESP32串口2通信使用回调与测距仪通信

  • List item

上代码
#define RXD2 18
#define TXD2 19
char hxe[4] = {0x80,0x06,0x02,0x78};//单次测量
char hxe2[4] = {0x80,0x06,0x03,0x77};//连续测量
float jili; //距离
float top = 1.8; //上限
float bottom = 0.35; //下限

void Callback(){
String Collect_Data = “”; //定义一个String类型的变量
//char *data[];
while(Serial2.available()){ //用While判断缓冲区是否有内容
Collect_Data += char(Serial2.read()); //取出缓冲区内容
delay(20); // 这里是重点,如不加一次只收一个字符。
}
Serial.println(Collect_Data); //输出取出的内容
if (Collect_Data[6] = 46){
jili = (Collect_Data[3]-48)*100
+ (Collect_Data[4]-48)*10
+ (Collect_Data[5]-48)
+ (Collect_Data[7]-48)*0.1
+ (Collect_Data[8]-48)*0.01
+ (Collect_Data[9]-48)*0.001;

Serial.println(jili,3);
}
if (bottom>jili || jili>top){
Serial.println(“超界”);
}
Collect_Data = “”; //清空内容
}

void setup() {
Serial.begin(115200);
// Serial1.begin(9600, SERIAL_8N1, RXD1, TXD1);
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
Serial2.onReceive(Callback); //定义串口中断函数
Serial2.print(hxe2);

}

void loop() { //当Serial2收到数据时,通过Serial串口显示出来
// while (Serial2.available()) {
// Serial.println(char(Serial2.read()));
// }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的示例代码,演示了如何在STM32和ESP8266之间使用USART2进行串口通信。在这个示例中,STM32发送一个字符串给ESP8266,然后等待ESP8266的响应。 ``` #include "stm32f10x.h" #define USART2_TX_PIN GPIO_Pin_2 #define USART2_RX_PIN GPIO_Pin_3 #define USART2_GPIO GPIOA USART_InitTypeDef USART_InitStructure; void USART2_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE); // Configure USART2 Tx (PA.2) as alternate function push-pull GPIO_InitStructure.GPIO_Pin = USART2_TX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(USART2_GPIO, &GPIO_InitStructure); // Configure USART2 Rx (PA.3) as input floating GPIO_InitStructure.GPIO_Pin = USART2_RX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(USART2_GPIO, &GPIO_InitStructure); // Configure USART2 USART_InitStructure.USART_BaudRate = 115200; 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; USART_Init(USART2, &USART_InitStructure); // Enable USART2 USART_Cmd(USART2, ENABLE); } void USART2_SendString(char* s) { while(*s) { // Wait until data register is empty while(!(USART2->SR & USART_SR_TXE)); USART_SendData(USART2, *s++); } } int main(void) { char* message = "Hello, ESP8266!"; USART2_Init(); // Send message to ESP8266 USART2_SendString(message); // Wait for response from ESP8266 while(!(USART2->SR & USART_SR_RXNE)); char response = USART_ReceiveData(USART2); // Do something with the response... while(1); return 0; } ``` 请注意,这只是一个简单的示例代码,实际实现中可能需要考虑更多的错误检测和容错处理。同时,ESP8266的串口通信也需要相应的配置和代码来处理STM32发送的数据和发送回来的响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值