星光召集令星允派F103测评·

星允派 F103第二回:夹缝求生——在Arduino下使用串口

aramy

aramy

93 0

书接上回,上次成果地使用Vscode+platformIO搭建起了Arduino的开发环境,并成功地点亮了一颗LED灯。但是心细的同学应该发现了,代码里的“Serial.println("Hello World!");”,使用串口工具是收不到消息的。说书人管这个叫扣子,写代码的只能称其为——坑😪 。


今天来解决这个问题。`

#include <Arduino.h>
#define LED PB4
void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
}

void loop() {
  Serial.println("Hello World!");
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}

-寻找问题:依然是昨日的代码。串口到底有没有工作?顺着代码一路寻找,会找到这么个设置,这里的串口使用的是PA2、PA3两个管脚。那么当前代码如果正常工作,则会在PA2上输出“Hello World”。 查看电路图可以得知,PA2连接到了按键1上去了,额外接一个USB转串口的模块,将GND与星允派的GND连接到一起,将USB转串口的模块的RX用杜邦线的公头去触碰按键1的靠内的引脚。串口工具成功地读取到了“Hello World”。表明串口工作正常。 但是这样没有解决问题。Arduino下调试基本都靠串口了,没有串口很难调试。总不能给K1焊根线,接到SB转串口的模块吧!太不简洁了。

-尝试解决:第一个想到的方法就是,将variant_generic.h的管脚改了,改成需要用的管脚。我们需要使用的管脚是PA9、PA10。办法很不错,不过结果很现实,不行。串口压根不输出。 寻找了一下原因,觉得应该是这个原因,PA9、PA10属于串口1;PA2、PA3属于串口2。导致仅仅修改管脚不成功。

反复阅读了variant_generic.h这个文件,里边有这么一段,应该是定义了串口2作为默认的串口,对照着WSerial.h文件,应该是这么个意思,但是尝试将“ #define SERIAL_UART_INSTANCE 2”修改为“ #define SERIAL_UART_INSTANCE 1”,也是不行,这里就想不明白为啥了。 `

#ifndef SERIAL_UART_INSTANCE
  #define SERIAL_UART_INSTANCE  2
#endif

-笨办法解决:通过修改配置,想优雅的解决这个问题,没有成功。接下来一种方法是使用模拟串口,配置模拟串口到PA9、PA10,显然这个方法太占系统开销太笨重了,不考虑。最后使用HardwareSerial来解决这个问题,也算是夹缝中求生存了。 `

#include <Arduino.h>
#define PIN_SERIAL1_RX         PA10
#define PIN_SERIAL1_TX         PA9
HardwareSerial Serial1(USART1);

void setup()
{

  pinMode(PIN_SERIAL1_RX, INPUT);
  pinMode(PIN_SERIAL1_TX, OUTPUT);
  Serial1.begin(115200);
  Serial1.setRx(PIN_SERIAL1_RX);
  Serial1.setTx(PIN_SERIAL1_TX);
}

void loop()
{
  Serial1.println("Hello World!");
  delay(1500);
}

-至此问题解决。

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 0

登录 后参与评论

评论

成为第一个评论的人