STM32G070RBT6基于Arduino框架下串口数据接收使用示例

STM32G070RBT6基于Arduino框架下串口数据接收使用示例


🌻串口接收数据转发

📑通过使能串口1,并将串口引脚指定到PA10,PA9上。将从串口接收到的数据,转发出去。

#define led1  PC2
#define led2  PC3

#define button1  PC0
#define button2  PC1

String comdata = "";
bool mark = false;

//                     RX    TX
HardwareSerial Serial1(PA10, PA9);
// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
   digitalWrite(led1, LOW);
   digitalWrite(led2, HIGH);
     pinMode(button1, INPUT_PULLUP);
   pinMode(button2, INPUT_PULLUP);

}

void loop() {

while (Serial.available() > 0)
  {
    comdata += char(Serial.read());
    delay(2);
    mark = 1;//标志位
  }
  if (mark == true)
  {//标志位判断
    Serial.println(comdata);
    mark = 0;//使用完数据,记得一定要清空标志位,等待下一次数据接收
    comdata = "";//使用完数据,清空变量的数据,等待下一次接收
    digitalWriteFast(PC_2, !digitalReadFast(PC_2)) ; 
    digitalToggle(led2);
  }
}

🌼对接收内容中指定字符串段内容进行判断

⚡需要注意的是,字符串与字符串进行比较时,使用String.str.compareTo(),的返回值如果是0则相同,如果是1则不相同。

#define led1  PC2
#define led2  PC3

#define button1  PC0
#define button2  PC1

String comdata = "";
bool mark = false;

//                     RX    TX
HardwareSerial Serial1(PA10, PA9);
// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
   digitalWrite(led1, LOW);
   digitalWrite(led2, HIGH);
     pinMode(button1, INPUT_PULLUP);
   pinMode(button2, INPUT_PULLUP);

}

// the loop function runs over and over again forever
void loop() {

while (Serial.available() > 0)
  {
    comdata += char(Serial.read());
    delay(2);
    mark = 1;//标志位
  }
  if (mark == true)
  {//标志位判断
    Serial.println(comdata);
    String str = comdata.substring(0,5);
    Serial.println(str);
  //  if(str == "hello")Serial.println("Yes,is hello");
    if(str.compareTo("hello")==0)Serial.println("Yes,is hello");//同上
    mark = 0;//使用完数据,记得一定要清空标志位,等待下一次数据接收
    comdata = "";//使用完数据,清空变量的数据,等待下一次接收
    digitalWriteFast(PC_2, !digitalReadFast(PC_2)) ; 
    digitalToggle(led2);
  }
}
  • 串口打印
    在这里插入图片描述

通过serialEvent()事件来接收数据

serialEvent()事件函数可以不用放在主循环loop中。该函数会运行在loop与loop之间响应。如果主循环loop函数中有有较多的处理任务运行时,不推荐使用这个函数来处理接收数据,否则加得不到及时响应。

#define led1  PC2
#define led2  PC3

#define button1  PC0
#define button2  PC1

String comdata = "";
bool mark = false;

//                     RX    TX
HardwareSerial Serial1(PA10, PA9);
// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
   digitalWrite(led1, LOW);
   digitalWrite(led2, HIGH);
     pinMode(button1, INPUT_PULLUP);
   pinMode(button2, INPUT_PULLUP);

}

// the loop function runs over and over again forever
void loop() {
  if (mark == true)
  {//标志位判断
    Serial.println(comdata);
    String str = comdata.substring(0,5);
    Serial.println(str);
   // if(str == "hello")Serial.println("Yes,is hello");
   if(str.compareTo("hello")==0)Serial.println("Yes,is hello");
    mark = 0;//使用完数据,记得一定要清空标志位,等待下一次数据接收
    comdata = "";//使用完数据,清空变量的数据,等待下一次接收
    digitalWriteFast(PC_2, !digitalReadFast(PC_2)) ; 
    digitalToggle(led2);
  }
}

void serialEvent() {
while (Serial.available() > 0)
  {
    comdata += char(Serial.read());
    delay(2);
    mark = 1;//标志位
  }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32G070RBT6是一款基于Arduino框架的微控制器。它具有59个IO口,但只有16个中断线可供使用。为了将中断线与IO口对应起来,可以参考引用\[1\]中提供的外部中断线和IO口的对应关系图。此外,在Arduino中,相关的中断线定义在interrupt.h头文件中,可以在路径C:\Users\Administrator\AppData\Local\Arduino15\packages\STMicroelectronics\hardware\stm32\2.3.0\cores\arduino\interrupt.h找到。在使用中断时,可以使用stm32_interrupt_enable函数来使能中断,使用stm32_interrupt_disable函数来禁用中断。\[2\] 另外,如果你对STM32G070RBT6开发板感兴趣,可以参考引用\[3\]中提到的硬件开源电路,该开发板的制作过程中可能会遇到一些问题,但最新版本的软件已经修复了其中的bug。 #### 引用[.reference_title] - *1* *2* [STM32G070RBT6基于Arduino框架GPIO外部中断](https://blog.csdn.net/weixin_42880082/article/details/127436441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【硬件开源电路】STM32G070RBT6开发板](https://blog.csdn.net/weixin_42880082/article/details/127381526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值