APP下载

STM32的常用外设驱动程序的开发

2021-06-28沈镐哲

电子测试 2021年1期
关键词:外设驱动程序文件夹

沈镐哲

(绍兴文理学院数理信息学院,浙江绍兴,312000)

关键字:STM32;Cortex-M;常用外设驱动开发;应用拓展

0 引言

科技发展日益迅猛,具有低成本、低功耗、高性能、可裁剪、功能多等优势ARM结构的STM32系列单片机成为市场主流的芯片。STM32是意法半导体公司比较早推向市场的基于Cortex-M内核的微处理器系列产品,该系列具有许多优势,满足市场的需求。STM32系列形成芯片家族,用户可根据工程需要选择,受到大众的广泛好评。STM32的开发一般用固件库或者寄存器的开发方式,STM32的内核是ARM公司设计的处理器体系架构。ST公司或其它芯片生产厂商如TI,负责设计的是在内核之外的部件,被称为核外外设或片上外设、设备外设。STM32的常用外设与传统的51单片机类似,网络资源比较丰富,但资源较为零散且代码形式参差不齐,缺少统一开发整理。本次课题将常用的STM32驱动程序开发、调试完全,并且成体系收集、整理好,可供学生实验、课程设计、学科竞赛、学生科研使用,对本行业的软硬件工程师开展工作也有一定的帮助。

1 常用外设驱动库结构

本课题选用STM32F103ZET6为目标CPU,其配置强大、资源丰富,为外设的开发提供了良好的条件。STM32F103ZET6具有 FLASH、SRAM、定时器、DMA、SPI、IIC、ADC、DAC以及FSMC等功能。STM32F103ZET6常用的外设有按键、显示器、AD与DA转换器、EEPROM、时钟芯片、温度传感器、语言模块等。STM32扩展的外设需要一个完整的外设库结构加以管理。本课题常用外设开发做到只需添加需要的外设到相应的文件夹即可调用使用。

驱动程序主要包含以下几个工程文件:USER、HARD WARE、STSTEM、CORE、FWLib。其 中,USER文 件 下 存 放main.c、stm32f10x_it.c、system_stm32f10x.c这些文件,HARDWARE文件夹下存放相关外设的.c文件,SYSTEM文件下一般存放delay.c、sys.c、usart.c文件,CORE文件夹下存放内核和不同容量开发板的启动文件,FWLib文件夹存放misc.c、stm32f10x_xxx.c文件。这些文件夹功能不同,使用者想外设驱动开发,应在相应文件下添加文件。这能使文件分类清晰明了,使用方便,可作为工程模板。下图1以LCD为例说明驱动程序结构。

图1 LCD的驱动程序结构

以下举几个常用外设驱动的例子,说明外设驱动库的结构。最简单的例子为跑马灯,除USER和SYSTEM文件与上述一致而无需改变外,首先需要在HARDWARE文件夹下添加led.c文件,其次在CORE文件夹下放core_cm3.c内核文件和startup_stm32f10x_hd.s高容量的STM32启动文件,最后在FWLIB文件下添加misc.c、stm32f10x_gpio.c、stm32f10x_rcc.c、stm32f10x_usart.c文件。其中,led.c文件需要自己编写,文件内的初始化函数需要修改引脚模式等参数。这样跑马灯的驱动程序结构就完成了。再如OLED显示程序,只需要在跑马灯驱动程序基础上于HARDWARE文件夹下添加oled.c文件,同样oled.c文件内的函数需要自己编写修改,这样便能完成OLED显示程序。当外设比较高级时,需要在FWLIB中添加文件。例如使用红外遥控外设,在工程模板基础上,在HARDWARE文件夹下添加remote.c文件并在FWLIB文件夹下添加stm32f10x_tim.c文件。在FWLIB文件夹下添加stm32f10x_tim.c文件是因为红外遥控需要使用输入捕获。与前述外设相同,需要自行编写remote.c文件。

2 常用外设驱动实例

STM32的常用外设数量较多、较复杂,而且外设之间经常需要配合使用,直接操作寄存器不太方便,所以常用外设驱动程序的开发让人更容易理解使用STM32。下面以LCD、时钟芯片、无线通信模块为例,介绍STM32的外设驱动程序开发成果。

2.1 TFTLCD

TFTLCD即薄膜晶体管液晶显示器。薄膜晶体管液晶显示器具有重量轻、平板化、低功耗、无辐射、显示品质优良等特点,其应用领域正在逐步扩大。本课题选用2.8寸的ALIENTEK TFTLCD模块,该模块支持65K色显示,显示分辨率为320×240,接口为16位的80并口,屏幕可触摸。下图2是LCD及拓展外设开发流程图。

图2 LCD及拓展外设开发流程图

本课题的TFTLCD显示由FSMC接口控制,以下为FSMC相关的介绍。FSMC为灵活静态存储控制器,能够与存储器和PC存储卡相连,其接口支持SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。STM32的FSMC分为3类外设:NOR/PSRAM设备、NAND设备、PC卡设备。这些设备之间用不同的CS区分,TFTLCD用的就是FSMC_NE4,将TFTLCD视为SRAM。外部SRAM的控制有:地址线、数据线、写信号、读信号、片选。而TFTLCD也有类似的操作时序,包含RS、WR、RD、CS等。因此,TFTLCD由FSMC接口控制完全可行,且TFTLCD的初始化函数与FSMC的三个寄存器有关,通过配置FSMC的寄存器即可驱动LCD。FSMC有3类外设,分别对应3个初始化函数,而这3个初始化函数内初始化了FSMC_BCRx、FSMC_BTRx、FSMC_BWTRx三个寄存器。通过编写3个初始化函数,即可分别控制3类外设。下图3为LCD与芯片接口电路图。

图3 LCD与芯片接口电路图

2.2 时钟芯片

与STM32配合使用的时钟芯片有DS3231、PCF8563、DS1302等,本课题选择DS3231时钟芯片。DS3231是一种低成本、高精度的IIC时钟芯片,集成了TCXO和晶体。DS3231时钟芯片具有IIC接口,地址与数据通过IIC双向总线串行传输,传输速度达400kHz。本课题选用DS3231芯片,该芯片可直接与STM32的IIC外设模块引脚相连,使用方便。STM32F103ZET6与DS3231芯片相对应的引脚连接需4根线,除VCC和GND与相对应连接外,只需PB6与DS3231的SCL、PB7与DS3231的SDA连接,占用引脚较少。

由于DS3231时钟芯片用到的是IIC总线,所以相关的外设程序开发都与IIC相关。以下介绍IIC相关函数,了解了IIC相关函数不仅学会如何使用DS3231时钟芯片,更能快速了解使用有关IIC的外设。首先应在stm32f10x_conf.h文件内包含相应的头文件,在这个文件内可以一键包含所有已列的文件,这样比较便捷,不必每次再去添加。其次在主函数内加入相应头文件并初始化IIC、DS3231时钟芯片,这便能使用固件库内的函数。其中,IIC相关的函数有初始化 I2C_init()、使能 I2C_Cmd()、I2C_Write1Byte()、I2C_Read1Byte()等。I2C_init()函数用于设置相应的IO、模式、速率这些参数。以下是DS3231时钟与IIC总线结合实例,主要对DS3231.c文件的编写。第一步文件内应包含相应的DS3231.h和IIC.h头文件,这两个头文件主要包含预定义和函数申明。接下来最重要的是DS3231时钟初始化函数DS3231_init(),函数内部主要是IIC初始化函数IIC_init(),而IIC初始化函数上述已说明。此外,DS3231.c文件内还包含DS3231读写函数、设定与读取时间函数。而DS3231的读写需要用到IIC相关的函数,比如IIC的启动函数IIC_Start()、IIC发送字节函数IIC_Send_Byte()。编写完上述内容,时钟芯片相关文件就完成了。STM32程序在主函数内调用外设的.c文件便可使用外设。当需要使用DS3231时,在主函数内调用DS3231_init()函数以完成DS3231的初始化,再调用DS3231_Set()函数完成时间设置,while循环内更新时间。

DS3231时钟芯片用到的IIC总线可扩展其他的外设,例如OLED显示屏、MAX30102、MAX30205等。因此,通过DS3231时钟芯片的开发使用,即可了解IIC总线的内容,进而又可快速入门有关IIC总线的外设。

2.3 无线通信模块

与STM32连接使用的无线通信模块有NRF24L01、ME3630-C3B、ATK-GM510等。本课题选用NRF24L01无线通信模块,具有不错的稳定性。NRF24L01是2.4G无线通信模块,最高速度达2Mbps,抗干扰能力强,满足多点通信的需求。下图4是NRF24L01的电路图。

图4 NRF24L01的电路图

NRF24L01与STM32通过SPI通信,而SPI的速度最高可达18MHz,能够实现无线快速传输。NRF24L01的使用要先初始化,函数为NRF24L01_Init(),函数内部初始化相应的引脚及其参数。此外,该函数还应初始化SPI并设置相应参数。初始化完成之后还应用函数NRF24L01_Check()检测无线通信模块是否存在。上述步骤完成之后,即可在主函数循环内设置NRF24L01的模式,这两种模式分别完成收发。同时,NRF24L01的通信可以配合LCD显示结果。以下介绍SPI通信以及其外设拓展。SPI即串行外围设备接口,主要应用在EEPROM、FLASH、AD转换器等外设上。SPI是高速、同步、全双工的通信总线,只使用MISO、MOSI、SCLK、CS这四条线,使用方便。SPI以主从方式工作,一个主设备可以和一个或多个从设备通信,所以多个外设可与SPI相连以实现多个功能。SPI总线的应用有以下几个基本步骤:连接SPI外设时钟、连接被复用的IO外设时钟、设置IO为推挽输出、调用初始化函数设置工作模式、使能SPI、收发数据。应用在STM32上的常用外设有OLED、W25Q128等,这些外设只需按上述步骤操作即能使用。例如驱动FLASH芯片W25Q128,不仅需要初始化使能端口,还应初始化SPI时钟。初始化完成之后,应配置工作模式并使能SPI。上述完成之后便可进行对W25Q128操作。

3 总结

通过STM32常用外设驱动程序的开发,初学者将更加容易上手使用STM32,提高了学习效率,而工程师能提高工作效率。STM32常用外设驱动程序的开发开拓应用领域,更是推动了单片机的更新和换代。

MVG推出用于全尺寸汽车天线测量的多探头测量系统SG 3000M

无线连接测试专家MVG近日宣布推出多探头测量系统SG 3000M。SG 3000M专为全尺寸汽车天线测量和OTA测试而设计,可将现有吸波暗室升级为用于互联车辆的天线测量和OTA测试设备。

SG 3000M的MV-Scan多探头技术和嵌入式过采样功能可确保准确、高效的天线测量。其宽频带覆盖范围从200MHz到10GHz,使其能够支持开发汽车连接性大多数现有的端到端测试协议。

猜你喜欢

外设驱动程序文件夹
磁力文件夹
调动右键 解决文件夹管理三大难题
TC一键直达常用文件夹
Microchip推出具备双ADC外设的全新器件,扩展其低成本8位PIC®单片机产品线
贴身呵护 必不可少的PSP外设
外设天地行情
外设天地行情
驱动程序更新与推荐
驱动程序更新与推荐
驱动程序更新与推荐