当前位置:   article > 正文

利用HAL库实现串口数据回显_stm32串口回显

stm32串口回显

目录

一、    环境配置

1.1    MDK5安装

1.2    芯片包下载

1.3    STM32CubeMX安装

1.4    串口驱动安装

1.5    串口助手安装

二、    使用 STM32CubeMX 新建工程

2.1    选择CPU型号

2.2    确认时钟源

2.3    配置IO口

2.4    配置时钟树

2.5    配置工程属性

2.6    生成代码

三、    使用HAL库点亮LED

3.1    配置芯片

3.2    配置下载调试工具

3.3    点亮LED

四、    使用HAL库实现串口数据回显

4.1    串口选择

4.2    利用STM32CubeMX配置USART

4.3    测试串口是否配置正确

4.4    编写数据回显函数

4.3.1    中断函数使能

4.3.2    中断函数编写


一、    环境配置


1.1    MDK5安装

        MDK5的安装包网上教程很多,可以去野火或者正点原子官网下载。注意安装的路径不能带有中文,否则可能会影响后续使用。


1.2    芯片包下载


        芯片包根据所使用的开发板型号,在MDK5官网下载https://www.keil.com/dd2/pack/#!/%23eula-container。本次使用的开发板型号为:GD32C103CBT6,需要下载GD32F10x(如图1-1)与STM32F1(如图1-2)的芯片包,下载完成后安装在MDK5对应文件夹内,安装路径分别为:keil\Keil_V5\ARM\PACK\GigaDevice,keil\Keil_V5\ARM\PACK\Keil

 
图1-1

 
图1-2


1.3    STM32CubeMX安装


在官网下载STM32CubeMX安装包https://www.st.com/zh/development-tools/stm32cubemx.html,进入官网,点击获取软件跳转至下载页面,如图1-3所示,点击下载后需要填写邮箱,按照邮件指示进行下载。注意安装的路径不能带有中文,否则可能影响后续使用。

 
图1-3


1.4    串口驱动安装


        本次需要用到的硬件有:USART转USB串口工具(三线接口)、下载调试工具STLink(四线接口),其中USART转USB串口工具需要下载对应驱动,一般win10系统自带,如果没有的话可以去我的网盘下载。
网盘链接:https://pan.baidu.com/s/1G-NNH8_FyCKeVn5BFr2TRw?pwd=2222 
提取码:2222
按照:软件\CH340驱动(USB串口驱动)_XP_WIN7共用 路径找到CH340驱动下载,并按照文档指示进行安装,安装完成后查看设备管理器,出现端口且没有问号跟感叹号表示驱动安装成功,如图1-4所示。


图1-4


1.5    串口助手安装

        串口助手随便下载一个即可,可以去野火的官网下载https://doc.embedfire.com/products/link/zh/latest/index.html,进入网盘挑选一个合适的版本下载如图1-5所示。

              
图1-5


二、    使用 STM32CubeMX 新建工程


2.1    选择CPU型号


        点击File/New Project创建一个新项目如图2-1所示,

 
图2-1

        根据开发板使用的CPU来选择具体型号,本次使用的开发板CPU为GD32C103CBT6,所以对应选择stm32f103xb,如图2-2所示双击红框位置进入配置页面。

 
图2-2


2.2    确认时钟源


        进入工程后在System Core目录下打开 RCC 选项,选择 Crystal/Ceramic Resonator,即使用外部晶振作为时钟源,如图2-3所示。

 
图2-3


2.3    配置IO口


        这个工程只需简单点亮一个LED灯,用于检验程序能否顺利执行,因此只需要配置一个IO口即可,这里选择控制蓝色LED的引脚PB15(结合开发板原理图来选择引脚),通过搜索框搜索可以定位 IO 口的引脚位置,图中会闪烁显示,配置 PB15 的属性为 GPIO_Output,如图2-4所示。

 
图2-4

         进一步配置IO口的具体属性,在 System Core目录下的GPIO进行配置,如图2-5所示出现小勾代表GPIO口使能。

 
图2-5


2.4    配置时钟树


        由于笔者使用的板子没有外部晶振,只能选择内部高速时钟HSI,只是实现一个串口功能,所以频率选择的8MHz,如图2-6所示,实际上就是系统默认状态,可以不用修改。

        有兴趣的可以去学习一下时钟树的配置,选择想要的时钟。

 
图2-6


2.5    配置工程属性


        为了防止出现,烧录以后仿真器无法连接的情况,在 System Core目录下将 SYS 里面的 Debug 设置成Serial Wire, 如图2-7所示,这样问题得到解决。

 
图2-7

        接着选择 Project Manager 选项,配置工程的名称,路径,使用的 IDE 工具,堆栈大小,如图2-8所示。注意不要使用中文路径和工程名称。

 
图2-8

        在Code Generator目录下勾选如图2-9所示的选项,第一个选项是只创建需要的库函数,勾选后可以加快函数执行效率;第二个选项是分别创建.c/.h文件,使得函数可读性更高。


 
图2-9


2.6    生成代码


        点击右上角 GENERATE CODE, 在设定的路径成功生成代码,选择Open Project打开工程。


三、    使用HAL库点亮LED


3.1    配置芯片


        点击魔术棒按钮进入Device设置界面,选择对应的芯片包,如图3-1所示。

 
图3-1

        进入Target界面,勾选使用微库,点击OK确定选项并编译程序,观察是否能够成功运行,如图3-2所示。

 
图3-2


3.2    配置下载调试工具


        再次点击魔术棒按钮进入Debug设置界面,选择对应的下载调试工具,点击Settings进入设置界面,如图3-3所示。

 
图3-3

        点击进入Flash Download设置界面,勾选Reset and Run,点击Add添加芯片对应的内存,点击确定保存设置,如图3-4所示。

 
图3-4


3.3    点亮LED


        如图3-5所示连接好硬件,注意三线接口中,黑线是GND,绿色是TX,白线是RX。连接好硬件后编译,下载,LED灯被点亮表明程序执行无问题。

 
图3-5


四、    使用HAL库实现串口数据回显


4.1    串口选择


        通过观察GD32C103CB原理图可知,该开发板的三针串口引脚由USART1引出,如图4-1,图4-2所示。

 
图4-1

 
图4-2


        通过对比两款芯片USART的状态寄存器、数据寄存器、波特率寄存器、控制寄存器可以发现两者的USART寄存器控制逻辑数完全一样,所以只要基地址能够对应,就能实现库函数上的兼容。查询数据手册发现GD32C103CB的USART1寄存器地址,对应的是stm32f103cb的USART2寄存器地址,如图4-3、4-4所示,因此需要配置stm32F103CB的USART2。

 
图4-3 GD32C103CB串口USART1地址范围

 
图4-4 STM32F103CB串口USART2地址范围


4.2    利用STM32CubeMX配置USART


        返回STM32CubeMX,如图4-5所示,在Pinout界面的Connectivity配置USART2。:
    步骤3,Mode模式中选择Asynchronous异步通信。
    步骤4,GPIO Settings会默认配置引脚,选择对应的引脚即可,若无问题无需修改。
    Parameter Settings会默认配置USART结构体参数,可以不进行改动,需要注意的是在进行串口调试时,串口调试助手的参数需要与之一一对应,如图4-6所示。

 
图4-5

 
图4-6


        由于串口数据回显功能需要使用到中断,因此需要将中断功能勾选上,如图4-7所示。其中Preemption Priority为抢占优先级,Sub Priority为子优先级(也叫响应优先级)。

 
图4-7

        设置完毕后点击右上角 GENERATE CODE, 在设定的路径成功生成代码,此时MDK5会弹框显示是否需要加载新模块,点击是;接着会弹出找不到对应芯片,按照3.1、3.2再手动选择一遍芯片,配置下载调试工具即可。
        此时生成的usart.c文件会出现雪花的标志,右击选择Option选项如图4-8,点击Defaults,再点击OK即可,如图4-9所示。

 
图4-8

 
图4-9


4.3    测试串口是否配置正确


        在main函数中调用发送函数,测试串口是否配置成功,能否成功发送数据。HAL库中发送数据共有三种模式:阻塞式、中断、DMA转运,此处采用最简单的阻塞式进行测试,如图4-10所示。需要注意的是由于使用了strlen函数,需要在主函数中#include “string.h”。

 
图4-10

        HAL_UART_Transmit ( UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout )函数可以在stm32f1xx_hal_uart.c中找到,属于HAL库封装好的函数,直接调用即可。
        第一个参数为USART的地址,USART的地址可以在usart.c中找到,结构体创建的句柄为huart2,这个结构体中包含了USART的波特率、数据位、停止位、校验位等信息,如图4-11所示,MX_USART2_UART_Init()函数对次结构体进行了初始化;
        第二个参数为想要发送的数据;
        第三个参数为发送数据的大小;
        第四个数据为发送数据的时间,单位为ms。

 
图4-11

        打开串口调试助手,设置好波特率等参数,对程序进行编译下载,可以看到数据被发送过去,表明USART的配置没问题,如图4-12所示。

 
图4-12


4.4    编写数据回显函数


        数据回显功能需要使用到RXNE中断功能,如图4-13所示,当DR寄存器收到数据时,RXNEIE被置1,进入中断函数。编写中断函数,将DR寄存器收到的数据读出来,RXNEIE恢复为0,再将读出的数据重新写回DR寄存器,便实现了数据的回显。

 
图4-13


4.3.1    中断函数使能


        在USART初始化函数中对中断函数进行使能,如果DR寄存器中有数据,进入中断函数,如图4-14所示。

 
图4-14


4.3.2    中断函数编写


        中断函数如图4-15所示,该中断函数生成在stm32f1xx_it.c中,将原本的HAL_UART_IRQHandler(&huart2)注释掉,编写自己的函数。
如果串口有数据就会进入中断函数,函数会获取RXNE判断是否为设定值,如果不为设定值,表示DR寄存器有数据,于是调用READ_REG函数读DR寄存器,最后将读到的数据利用WRITE_REG写回DR寄存器,于是实现了串口的数据回显。

 
图4-15

        最后下载编译程序,在串口调试助手输入框输入:数据回显测试,接收区域回显数据,发送字节12,接收字节由21增长为33,功能实现,如图4-16所示。

 
图4-16

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/433259
推荐阅读
相关标签
  

闽ICP备14008679号