零基础学习STM32 CubeMX串口收发的全面攻略

系列文章目录

第一章:初学单片机,使用STM32进行点灯


文章目录

  • 系列文章目录
  • 前言
  • 一、使用到的装置和软件
  • 二、串口收发
  • 1.STM32CubeMX配置
  • 2.keil5的使用
  • (1)阻塞式收发
  • 使用printf()进行输出
  • 发送数据
  • (2)中断式收发
  • 总结

  • 前言

    本文主要是解决简单的串口通信


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、使用到的装置和软件

    本案例主要涉及到的装置和软件有:
    1.一块STM32F103ZET6的开发板(也可使用其它板子)
    2.ST-LINKV2(有钱的也可使用J-link等)一个与杜邦线若干
    3.涉及到的软件有三个分别是:STM32CubeMX(用于生成文件),Keil uVision5(用于编程),XCOM V2.2(用于查看数据)

    4.USB TO TTL(USB转TTL串口)

    二、串口收发

    1.STM32CubeMX配置

    基本配置和第一章点灯案例一样(需要的可以在系列文章目录里面查看第一章),这里主要是对串口的配置:
    串口配置如图所示:

    Connectivity中UART(通用异步收/发器)、USART(通用同步/异步收/发器),从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型。

    我这里使用的是USART1(由于本案例选择的是异步串口,所以选择UART也可),在选择好了Mode之后一般会自动选择引脚A10(RX)和A9(TX)(注意在连接单片机和计算机时,单片机的RXD接计算机的TXD,单片机的TXD接计算机的RXD)

    在选好之后我们看下面协议的配置:

    Baud Rate 波特率:如果想要稳定一点的话可以选择9600这些,想要快一点就可以选择115200
    Word Length 字长(数据位和校验位的长度之和)
    Panity 校验位:None是无校验,Even是偶校验,Odd是奇校验
    Stop Bits 停止位

    可以点击GPIO Settings查看是否是自己要配的串口:

    我这里是PA9和PA10,如果要选择其它的串口可以鼠标左键单击右边芯片上的对应引脚进行选择。
    然后我们就可以点击生成文件了

    2.keil5的使用

    (1)阻塞式收发

    在main.c文件中写入代码:

    		HAL_UART_Transmit(&huart1,(uint8_t*)"Hello",5,0xFFFF);//阻塞式发送函数,第一个参数存放串口一的所有数据,
    		HAL_Delay(1000);
    
    

    然后运行程序没有报错就使用USB TO TTL 将单片机与电脑连接并烧录程序

    打开XCOM V2.2软件对数据进行监控

    串口选择:一般会自动分配到所在串口,如果可以打开设备管理器查看:

    在串口选择下面的选项要与前面在STM32CubeMX里设置的内容相同,然后打开串口,就可以接收到数据了(每隔一秒就会发送一句 Hello )。

    使用printf()进行输出

    还是在main.c文件中引入头文件

    #include<stdio.h>
    

    重写fputc()这个c标准库函数(printf()在c标准库函数实质是一个宏,实际是调用fputc()函数):

    int fputc(int c,FILE *stream)
    {
    	uint8_t ch[1]={c};
    	HAL_UART_Transmit(&huart1,ch,1,0xFFFF);
    	return c;
    }
    

    先注释掉原来的语句,使用printf()输出

    然后编译,没有报错就进行烧录。烧录完成之后就可以打开XCOM查看数据了:

    如果此时查看不到,经检查没有出现硬件以及未复位的问题,就打开魔法棒,点击Target,勾选如下图所示选项:


    然后重新进行烧录就能查看到结果了

    发送数据

    还是在main.c文件中写入代码:

    uint8_t buf[5];
    		HAL_UART_Receive(&huart1,buf,3,0XFFFF);
    		HAL_UART_Transmit(&huart1,buf,3,0xFFFF);
    

    然后重新进行烧录,点击XCOM,打开串口,在发送窗口输入要发送的字符串,然后点击右边的发送按钮,在接收窗口就能看见单片机返回的字符串。

    (2)中断式收发

    要使用中断式收发,先要在stm32cubemx里面将串口中断打开:

    然后再重新生成代码

    将数组定义成全局变量:

    uint8_t buffer[5];
    

    再写一个回调函数,将接收到的数组发送回去并开启下一次的接收:

    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
    	HAL_UART_Transmit_IT(&huart1,buffer,3);
    	HAL_UART_Receive_IT(&huart1,buffer,3);
    	
    }
    

    将第一次触发中断的语句放在while(1)之前

    HAL_UART_Receive_IT(&huart1,buffer,3);
    

    后续的串口操作都是由中断来进行的,此时while(1)中没有其它函数,我们可以在while(1)中编写其它的逻辑,基本不受串口影响。
    对程序进行运行和烧录,我们打开串口随便发送三个字符,可以看到字符成功的被返回回来了。


    总结

    以上便是串口的使用攻略了,除此之外还可以使用MDA方式进行收发,这里就暂时不进行讲解了。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 零基础学习STM32 CubeMX串口收发的全面攻略

    发表评论