串口通信由两种方式,第一种就是用微机原理课上学过的TX和RX两个接口进行通信。不过根据去年的经验,这个板子直接用TX和RX两个接口进行通信容易被烧坏,所以我们就用更简单的usb通信。
(更多文章可以在我的知乎或****号上获取)
- 前期准备(接口与编译语言及使用注意介绍)
- 流水灯介绍及代码详解
- I²C及串口介绍
- 微控制器命令FPGA控制电机
- Mbed中断
在发stm32的时候,老师会给你一个usb的供电线,这个线也是可以当作串口线使用的。而且我也更推荐用这个,因为你可以用一根线实现供电与通信。如果你不用这个usb连接到上位机上通信,你还要再买个充电宝通过usb供电,这样有点多此一举。
那么我们先看上位机需要什么,对于电脑来说,你需要下载以一个串口调试助手。然后打开串口。
对于stm32,则需要用程序来打开串口。我们具体看一下该怎么去做:
#include "" //头文件
Serial s1(USBTX, USBRX); //这里是调用串口的命令,USBTX和USBRX指明了是通过USB先进行串口连接
//如果使用电脑做为另一个串口设备的话,需要提前安装电脑端的串口助手
DigitalOut myled(LED1);
int main() {
s1.baud(9600);//设置波特率为9600,上位机的波特率也要设置一样,不然会乱码
while (true) {
s1.printf("hellow world \n");
char c = pc.getc();
if(c=='a')
{
myled = !myled
}
#include ""
没啥可说的,就是引入了头文件。
Serial s1(USBTX, USBRX); 是用了 Serial函数,也就是串口的调用函数,其规格是Serial A(t,r)第一个t是指使用哪个TX接口,这里系统已经将usb串口的TX封装成了USBTX,同理usb串口的RX封装成了USBRX。
也就是说当使用s1这个串口的时候,使用的usb进行通信。
在主函数里我们要先定义波特率,也就是一秒通过串口传多少个符号,这里要注意上位机与下位机的波特率必须一致,不然会乱码。道理也很简单,如果你传的速率是a,我接受的速率是b那么肯定我们就不是在一个频道上讲话(跨服聊天),这样必然乱码。
在电脑上直接设置就行,stm32上要用(9600);
设置,括号里面的数值代表了波特率大小,至于为什么是9600只能说是一种习惯。
(“hellow world \n”);
相当于printf(“hellow world \n”);
,就是用串口传输字符串“hellow world \n”然后打印出来。
c = ();
是指从上位机那接受一个字符,然后保存做c。
这样有一个好处,就是上位机可以直接通过串口控制stm32,
stm32只需要根据字符c的不同做出不同的动作就行。
在代码的最后一部分我做了一个示例,只要上位机穿过来一个字母‘a’,就改变LED灯的亮灭状态。
char c = pc.getc();
if(c=='a')
{
myled = !myled