STM32L476R快速入门——与上位机进行串口通信

串口通信由两种方式,第一种就是用微机原理课上学过的TX和RX两个接口进行通信。不过根据去年的经验,这个板子直接用TX和RX两个接口进行通信容易被烧坏,所以我们就用更简单的usb通信。
(更多文章可以在我的知乎或CSDN号上获取)

在发stm32的时候,老师会给你一个usb的供电线,这个线也是可以当作串口线使用的。而且我也更推荐用这个,因为你可以用一根线实现供电与通信。如果你不用这个usb连接到上位机上通信,你还要再买个充电宝通过usb供电,这样有点多此一举。

那么我们先看上位机需要什么,对于电脑来说,你需要下载以一个串口调试助手。然后打开串口。
对于stm32,则需要用程序来打开串口。我们具体看一下该怎么去做:

#include "mbed.h"   //头文件

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 "mbed.h" 没啥可说的,就是引入了头文件。
Serial s1(USBTX, USBRX); 是用了 Serial函数,也就是串口的调用函数,其规格是Serial A(t,r)第一个t是指使用哪个TX接口,这里系统已经将usb串口的TX封装成了USBTX,同理usb串口的RX封装成了USBRX。

也就是说当使用s1这个串口的时候,使用的usb进行通信。
在主函数里我们要先定义波特率,也就是一秒通过串口传多少个符号,这里要注意上位机与下位机的波特率必须一致,不然会乱码。道理也很简单,如果你传的速率是a,我接受的速率是b那么肯定我们就不是在一个频道上讲话(跨服聊天),这样必然乱码。

在电脑上直接设置就行,stm32上要用s1.baud(9600);设置,括号里面的数值代表了波特率大小,至于为什么是9600只能说是一种习惯。

s1.printf(“hellow world \n”); 相当于printf(“hellow world \n”); ,就是用串口传输字符串“hellow world \n”然后打印出来。

c = pc.getc();是指从上位机那接受一个字符,然后保存做c。
这样有一个好处,就是上位机可以直接通过串口控制stm32,
stm32只需要根据字符c的不同做出不同的动作就行。

在代码的最后一部分我做了一个示例,只要上位机穿过来一个字母‘a’,就改变LED灯的亮灭状态。

char c = pc.getc();
    if(c=='a')
    {
    
    
	myled = !myled
	

猜你喜欢

转载自blog.csdn.net/yikuanglancheng/article/details/105408345