版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务1安装开发工具任务要求查阅相关资料,弄清楚STM32的开发方式、应用开发所需要的软件工具,了解各软件工具的主要功能,并填写好开发工具准备清单,然后在网上搜索并下载或购买这些工具软件,再在计算机中安装MDK、STM32CubeMX等STM32开发工具软件、程序烧录软件、仿真器和USB转串口的驱动程序,检查软件的安装是否正确,为后续STM32的应用开发作好准备。知识储备
1.STM32微控制器STM32是意法半导体公司(ST公司)生产的基于ARMCortex-M内核的32位微控制器。其中,ST代表ST公司(意法半导体公司)M代表微控制器(MicrocontrollerUnit)32表示这种微处理器的字长为32位。1.STM32微控制器
STM32的产品可查阅ST公司的官网,其网址为/content/st_com/zh.htmlSTM32有许多产品,主要分为高性能微控制器主流微控制器超低功耗微控制器无线微控制器每一类产品包含若干系列的产品1.STM32微控制器
每一个系列按其应用特性又分为若干子系列,如下面左图所示。每个子系列按照其封装形式、存储器的大小、引脚数等又分为若干型号的产品,如右图所示。1.STM32微控制器
STM32产品的名字由9部分组成,最主要的是前7部分,不同部分用不同的字母或数字表示,代表不同的含义,STM32产品的命名规则如下图所示。序号字符含义1STM32ST公司的32位的微控制器2F基础型3103STM32基础型4R64引脚5BFlash存储器容量为128KB6T封装形式为QFP76温度范围为-40~85度2.STM32的软件开发方式
(1)基于寄存器的开发方式编程方法是直接访问STM32的寄存器,编程难度比较大编写的程序与底层硬件密切相关,程序的可移植性较差早期的STM32程序开发主要采用这种开发方式 (2)基于标准外设库的开发方式可以不了解STM32底层硬件原理,只需了解API函数的功能、使用方法就可以实现外设的驱动基于标准外设库的开发方式是目前比较多的开发方式只提供了早期生产的微控制的标准外设库,近期推出的MCU,无法使用这种开发方式
(3)基于STM32CubeMX的开发方式只需在STM32CubeMX的示意图中作一些简单的选择和配置,就可以生成STM32的硬件驱动程序开发方式非常简单,生成的程序具有很好的可移植性是现在和今后的开发方式,本书采用这种方式介绍STM32的应用开发技术实现方法与步骤STM32应用开发常用的工具软件主要有MDK集成开发工具Keil软件包STM32CubeMXJRE程序下载软件串口调试助手仿真器驱动程序USB转串口驱动程序
1.准备开发工具1.准备开发工具MDK集成开发工具主要用于程序的编辑和调试,是STM32应用开发使用最频繁的工具软件,MDK集成开发工具是Keil公司提供的,其下载地址为:/download/product/,下载页面如图所示。
1.准备开发工具Keil软件包也叫MDK软件包,它是MDK所支持芯片的数据文件。用MDK开发STM32应用程序时需要在MDK中先安装MDK所要支持的MCU数据包,即对应的Keil软件包。Keil软件包由Keil公司提供,其下载地址为:/dd2/pack/,下载页面如图所示。
1.准备开发工具Keil软件包下载页面比较长,向下拖动页面,在下载列表中找到Keil栏,再找到我们所需要的型号,例如STM32F1系列,然后下载即可,如图所示。
1.准备开发工具STM32CubeMX用于系统配置和初始化代码的生成,它是ST公司开发的一款图形化编程工具,其下载地址为:/en/development-tools/stm32cubemx.html。下载页面如图所示。
1.准备开发工具JRE(JavaRuntimeEnvironment)软件的作用是为STM32CubeMX提供运行环境。STM32CubeMX软件必须在Jave环境下运行,在安装STM32CubeMX软件之前需要先安装JRE软件,要求JRE的最低版是1.7.0_45。JRE可从ORACLE官网上下载,其下载地址为:/technetwork/java/javase/downloads/java-archive-javase8-2177648.html,下载页面如图所示。
1.准备开发工具程序下载软件的功能是将MDK产生的hex文件烧写至STM32中。进行STM32应用开发时对该软件并无特殊要求,只要能下载程序就可以了。目前比较常用的程序下载软件主要是FLASHER-STM32和mcuisp等2款软件。
FLASHER-STM32下载页面mcuisp软件下载页面ST公司开发,要求苛刻,兼容性差目前全国物联网大赛和“1+x”传感网应用开发中使用的是这款软件深圳鹏远电通科技有限公司开发的,其兼容性要好一些,在实际应用中,STM32开发工程师们常用这款软件。1.准备开发工具串口调试助手是一种监控调试计算机串口的软件,用于计算机与单片机之间串行通信。STM32应用开发中对该软件没有特殊要求,只要能实现计算机串口收发数据即可。在本书中,我们使用的串口调试助手是SSCOM,读者可在网上下载。仿真器驱动程序用来驱动所使用的仿真器,目前仿真STM32的仿真器主要有STLink、JLink等几种,本书中使用的是STLink仿真器,其驱动程序可从ST公司的网站上下载。USB转串口的芯片主要有CH34x、PL2303、CP21xx等几种,本书中选用的USB转串口芯片为CH340,是南京沁恒公司生产的,可到公司网站/下载其驱动程序。按照上述要求,到网上下载MDK等8个工具软件,并保存至某个文件夹中,例如保存至“D:\STM32开发工具”文件夹中。
2.解压工具软件收集到STM32应用开发工具软件后,需要将这些工具软件解压,再在计算机中安装这些工具软件。
解压文件解压后的文件3.安装MDK安装MDK524的方法如下:第1步:以管理员身份运行MDK安装文件,如图所示,打开欢迎对话框。
以管理员身份运行MDK安装文件欢迎安装对话框3.安装MDK第2步:在欢迎对话框中点击“Next”按钮,打开如图所示的许可协议对话框。第3步:在许可协议对话框中勾选“IagreetoallthetermsofprecedingLicenseAgreement”复选框,点击“Next”按钮,打开选择安装文件夹对话框。
许可协议选择安装文件夹3.安装MDK第4步:在选择安装文件夹对话框中分别选择Keil和Keil包安装的文件夹,然后单击“Next”按钮,打开填写用户信息对话框。第5步:在填写用户信息对话框中填写我们的一些信息,然后点击“Next”按钮,计算机就开始安装Keil。如果计算机中安装了360安全卫士,则在安装过程中会弹出如图所示的文件防护对话框。
填写用户信息文件防护对话框3.安装MDK第6步:在文件防护对话框中单击“”按钮,在展开的选项中选择“允许本次操作”选项,计算机继续安装Keil,在安装的过程中会弹出安装ULINK驱动程序窗口和安装ULINK驱动程序对话框,如下图所示。
安装ULINK驱动程序窗口安装ULINK驱动程序对话框3.安装MDK第7步:在安装ULINK驱动程序对话框中点击“不安装”按钮,计算机会关闭安装窗口,并弹出下图所示的完成安装对话框。第8步:在完成安装对话框中点击“Finish”按钮,结束Keil的安装。这时会自动弹出包安装窗口和欢迎安装对话框,同时桌面上会出现Keil5的快捷图标“”,至此MDK安装结束。
完成安装包安装窗口和欢迎安装对话框4.安装Keil包本书所使用的STM32是STM32F103VET6,属于STM32F1系列的MCU,使用MDK开发STM32F1系列MCU应用程序时需安装STM32F1系列的Keil包,其安装方法如下:第1步:在包安装窗口和欢迎安装对话框中,关闭欢迎安装对话框,保留包安装窗口。若用户关闭了下图所示的包安装窗口,可以打开Keil5的工作窗口,点击包安装图标按钮“”,系统就会打开包安装窗口。
包安装窗口和欢迎安装对话框Keil工作窗口4.安装Keil包第2步:在包安装窗口中点击菜单栏上的【File】→【Import…】菜单项,如图所示,打开输入包对话框。
Import菜单项输入包对话框【说明】在KeilPack文件夹中,我们提供了3个Keil安装包,若开发板中的STM32是其他系列的MCU,则需要根据所使用的STM32的型号来选择对应的Keil包。4.安装Keil包第3步:在输入包对话框的左边窗格中找到并打开“D:\STM32开发工具\KeilPack”文件夹,点击Keil.STM32F1xx_DFP.2.2.0.pack文件,再点击对话框中的“打开”按钮,系统就会开始安装我们所选择的STM32F1系列的Keil包。Keil包安装结束后,包安装窗口的Device栏中会增加一个“STMicroelectronics”条目,点击“STMicroelectronics”条目前面的“+”号,就可以看到“STM32F1Series”子条目,如图所示。第4步:关闭包安装窗口,结束Keil包安装。
STM32F1系列的Keil包安装结果5.激活MDK从Keil公司网站上下载的MDK开发工具存在2KB代码量限制问题,若用户代码量超过2KB,则MDK开发工具不能正常使用。激活MDK的方法如下:第1步:双击桌面上的快捷图标“”,启动Keil5。第2步:在Keil5的工作窗口中点击菜单栏上的【File】→【LicenseManagement】菜单项,如下图所示,打开许可证管理对话框。
许可证菜单项许可证管理对话框5.激活MDK第3步:在许可证管理对话框中点击“Single-UserLicense”标签,然后在“NewLicenseIDCode”文本框中输入新的许可证号,然后点击“AddLIC”按钮,将许可证号添加到系统中,然后点击“Close”按钮,完成MDK的激活。【说明】不同计算机的许可证号并不相同,图中的许可证号是作者所使用计算机上的许可证号,许可证号需向Keil公司购买。
许可证管理对话框6.安装JRESTM32CubeMX软件必须在Jave环境下运行,在安装STM32CubeMX软件之前需要先安装JRE(JavaRuntimeEnvironment)软件。下面以安装1.8.0_112版的JRE为例介绍JRE的安装步骤:第1步:右键点击jre-8u112-windows-i586.exe文件图标,在弹出的快捷菜单中点击“以管理员身份运行”菜单项,打开如图所示的欢迎对话框。
欢迎对话框6.安装JRE第2步:在欢迎对话框中点击“安装”按钮,计算机就开始安装JRE,并出现下图所示的安装进度,JRE安装结束后会出现“完成”对话框。第3步:点击完成对话框中的“关闭”按钮,完成JRE的安装。
安装进度完成对话框7.安装STM32CubeMX第1步:用鼠标右键点击安装文件SetupSTM32CubeMX-5.3.0.exe,在弹出的快捷菜单中点击“以管理员身份运行”菜单项,计算机中就会运行STM32CubeMX的安装程序,过一会就会出现如图所示的安装向导对话框。
STM32CubeMX的安装文件安装向导的欢迎对话框7.安装STM32CubeMX第2步:在安装向导欢迎对话框中单击“Next”按钮,打开许可协议对话框。第3步:在许可协议对话框中,勾选“Iacceptthetermsofthislicenseagreement”复选框,再点击“Next”按钮,打开如下图所示的隐私和条款对话框。
许可协议隐私和条款7.安装STM32CubeMX第4步:在隐私和条款对话框中勾选“IhavereadandunderstoodtheSTPrivacyPolicyandSTTermsofUse”复选框,然后点击“Next”按钮,打开设置安装路径对话框。第5步:在设置安装路径对话框中我们选择默认安装路径,直接点击“Next”按钮,出现下图所示的创建目录消息框。
设置安装路径创建目录消息框7.安装STM32CubeMX第6步:在创建目录消息框中点击“确定”按钮,打开创建快捷方式对话框。第7步:在创建快捷方式对话框中选择默认的设置,然后单击“Next”按钮,计算机就开始安装STM32CubeMX,并显示安装进度,安装结束后,安装进度对话框中的“Next”变为可用状态,如下图所示。
创建快捷方式安装进度7.安装STM32CubeMX第8步:在安装进度对话框中点击“Next”,打开如图所示的安装完成对话框。第9步:在安装完成对话框中点击“Done”按钮,结束STM32CubeMX的安装,桌面会出现快捷图标“”。
安装完成对话框8.安装STM32CubeMX库安装STM32CubeMX库的实质是选择STM32CubeMX所要支持的STM32产品并安装它们的固件支持包。STM32CubeMX库的安装有在线安装、导入离线包和解压离线包3种方式,这3种方式基本相同,只是固件包的来源不同而已,下面以在线安装方式为例介绍STM32CubeMX库的安装过程。安装STM32CubeMX库的步骤如下:第1步:在D盘新建“D:\STM32_PACK”文件夹,用来存放在网上下载的STM32CubeMX数据包,并作STM32CubeMX库安装文件夹。第2步:在桌面上双击STM32CubeMX的快捷图标“”,启动STM32CubeMX,并打开STM32CubeMX工作窗口,如果是第1次启动STM32CubeMX,则工作窗口中会弹出一个使用统计对话框。
8.安装STM32CubeMX库第3步:在使用统计对话框中点击“Nothanks”按钮,关闭使用统计对话框。第4步:在STM32CubeMX工作窗口中单击菜单栏上的“Help”→“UpdaterSettings”菜单项,如下图所示,打开“UpdaterSettings”对话框。
STM32CubeMX工作窗口和使用统计对话框UpdaterSettings菜单项8.安装STM32CubeMX库第5步:在“UpdaterSettings”对话框中点击“UpdaterSettings”标签名,然后在UpdaterSettings标签中点击“Browse”按钮,在弹出的选择固件安装文件夹对话框中,将安装目录设置为D:\STM32_PACK,如下图所示。
UpdaterSettings对话框选择固件安装文件夹8.安装STM32CubeMX库第6步:在右图的“UpdaterSettings”对话框中点击“CheckandUpdateSettings”框架中的“ManualCheck”单选钮,将检查更新方式设置成人工检查,点击“DataAuto-Refresh”框架中的“NoAuto-RefreshatApplicationstart”单选钮,将数据更新方式设置为应用开始时不自动更新,如右图所示。然后点击“OK”按钮,完成更新设置。
UpdaterSettings对话框8.安装STM32CubeMX库第7步:在“UpdaterSettings菜单项”窗口中单击菜单栏上的“Help”→“Manageembeddedsoftwarepackages”菜单项,打开如下图所示的“EmbeddedSoftwarePackagesManager”对话框。
EmbeddedSoftwarePackagesManager对话框UpdaterSettings菜单项8.安装STM32CubeMX库第8步:在“EmbeddedSoftwarePackagesManager对话框”中,点击“STM32CubeMCUPackages”标签名,然后在标签下面的列表框中找到STM32F1,再点击STM32F1左边的“”符号,从展开的列表项中勾选最新版的MCU数据包,再点击“InstallNow”按钮,系统就自动地下载并安装所选择数据包,并弹出“Downloadingselectedsoftwarepackages”对话框。
EmbeddedSoftwarePackagesManager对话框8.安装STM32CubeMX库第9步:软件包下载完毕后点击下图中的“OK”按钮,结束STM32CubeMX库的安装。
下载所选的软件包9.安装CH340驱动程序安装CH340驱动程序的方法如下:第1步:打开“D:\STM32开发工具\串口驱动-CH340_Windows”文件夹,然后双击CH340的驱动程序图标“”,打开驱动安装对话框。第2步:在“驱动安装”对话框的“选择INF文件”下拉列表框中选择“CH341SER.INF”列表项,然后单击“安装”按钮,系统就开始执行安装程序,驱动程序安装结束后会自动弹出驱动安装成功提示框,单击提示框中的“确定”按钮,结束CH340驱动程序的安装。
CH340的驱动程序驱动安装对话框提示框10.查看USB口映射的串口号查看串口号的操作方法如下:第1步:用USB线将计算机的USB口与开发板上的USB口相接。第2步:在桌面上右击“计算机”图标,在弹出的快捷菜单中单击“属性”菜单命令,打开如图所示的系统窗口。第3步:在系统窗口中单击“设备管理”超连接,打开“设备管理器”窗口。
系统窗口10.查看USB口映射的串口号第4步:在“设备管理器”窗口中单击“端口”左边的“”符号,展开“端口”项,“端口”项下面会出“USB-SERIALCH340”项。该项右边的COMX就是当前USB口所映射的串口号,例如右图中所表示的是当前的USB口所映射的串口号为COM3,后续计算机通过该USB口与STM32进行串行通信时,串口编号就应该选择COM3。
设备管理器窗口11.安装STLink驱动程序安装STLink驱动程序的方法如下:第1步:在系统窗口中查看“系统类型”,查看操作系统的位数。本机中的操作系统为64位的操作系统。第2步:打开“STLINK驱动”文件夹,然后双击STLink驱动程序dpinst_amd64,打开欢迎安装对话框。STLink驱动程序系统窗口11.安装STLink驱动程序第3步:在欢迎安装对话框中点击“下一步”按钮,计算机就准备安装STLink驱动程序,并弹出Windows安全对话框。第4步:在安全对话框中点击“安装”按钮,系统就开始安装STLink驱动程序,程序安装结束后就会弹出完成驱动安装对话框。欢迎安装Windows安全对话框11.安装STLink驱动程序第5步:在完成驱动安装对话框中点击“完成”按钮,结束STLink驱动程序的安装。第6步:将STLink插入计算机的USB口中,然后在“系统窗口”中点击“设备管理”超链接,打开“设备管理器”窗口。完成驱动安装系统窗口11.安装STLink驱动程序第7步:在“设备管理器”窗口中点击“UniversalSerialBusdevices”左边的“”符号,就可以看到“STMicroelectronicsSTLinkdongle”符号,表明STLink驱动安装成功。【说明】如果设备名称旁边显示的是黄色感叹号,则表明设备的驱动程序安装有问题,请直接点击设备名,然后在弹出的界面中点击更新设备驱动程序。设备管理器窗口12.安装程序下载软件在STM32开发工具文件夹中我们提供了2个常用的STM32程序下载软件,一个是mcuisp,这个软件是一个绿色软件,不需要安装就可以使用。另一个是FLASHER-STM32软件,这个软件需要安装后才能使用。安装FLASHER-STM32软件的方法如下:第1步:打开“flasher-stm32”所在文件夹,然后双击图中程序下载软件flash_loader_demo_v2.8.0.exe,计算机就准备安装FLASHER-STM32软件,过一会就会打开欢迎安装对话框。FLASHER-STM32安装程序12.安装程序下载软件第2步:在欢迎对话框中点击“Next”按钮,打开如图所示的输入用户信息对话框。第3步:在输入用户信息对话框中填写我们的一些信息,然后点击“Next”按钮,打开选择安装文件夹对话框。欢迎安装输入用户信息12.安装程序下载软件第4步:在选择安装文件夹中我们选择默认的安装文件夹,直接点击“Next”按钮,打开准备安装程序对话框。如果用户打算在其他文件夹中安装FLASHER-STM32软件,可点击“Change”按钮,然后在打开的选择文件夹对话框中选择安装文件夹。选择安装文件夹12.安装程序下载软件第5步:在准备安装程序对话框中点击“Install”按钮,计算机中就开始安装FLASHER-STM32软件,并显示安装的进度,程序安装结束后会打开完成安装对话框。准备安装程序12.安装程序下载软件第6步:在完成安装对话框中点击“Finish”按钮,完成FLASHER-STM32软件的安装。此时打开“开始”菜单,就可以看到在“STMicroelectronics”项中增加了一个“FlashLoader”子项,“FlashLoader”子项中有一个“DemonstratorGUI”子项,这个子项就是FLASHER-STM32程序下载软件的快捷菜单项,如图所示,点击“DemonstratorGUI”子项就可以启动FLASHER-STM32程序下载软件。完成安装FLASHER-STM32快捷菜单实践总结与拓展
STM32是ST公司生产的32位微控制器,是目前最为流行的MCU,STM32的应用开发主要有3种方式,目前和今后的软件开发方式主要是基于STM32CubeMX的开发方式。STM32应用开发常用的工具软件主要有MDK集成开发工具、Keil软件包、STM32CubeMX、JRE、程序下载软件、串口调试助手、仿真器驱动程序、USB转串口驱动程序等8个,其中程序下载软件主要是FLASHER-STM32和mcuisp等2款软件,这些软件都可以从各自的官网上下载,在选择驱动程序时要注意驱动程序要与所用的硬件以及计算机操作系统相匹配。实践总结与拓展
在STM32应用开发的8个工具软件中,MDK集成开发工具、Keil软件包、STM32CubeMX、JRE和FLASHER-STM32程序下载软件安装方法相似,在安装过程中需要允许修改Windows注册表或者在安装工具软件之前关闭注册表防护软件。这几个工具软件的安装比较简单,只需要按照安装提示一步一步地操作就可以完成。串口调试助手和mcuisp程序下载软件是绿色软件,不需安装。仿真器驱动程序和USB转串口驱动程序的安装方法相同,需要接入所要驱动的硬件后才能完成驱动程序的安装,程序安装结束后还需要检查驱动程序安装是否正确。本任务到此结束,谢谢!任务2 点亮LED灯任务要求STM32的主时钟源为外部晶体振荡电路,程序的调试模式为SWD模式,GPIO口的PE口外接8只发光二极管的控制电路,发光二极管采用低电平有效控制,8只发光二极管的编号依次为LED1~LED8。要求用STM32CubeMX对STM32进行适当配置,然后生成Keil工程代码,再在Keil中对程序进行编译连接,生成hex文件,然后用STM32的程序下载软件将hex文件下载至STM32中,使LED1点亮,其他发光二极管熄灭。知识储备
1.初识GPIO口GPIO是GeneralPurposeInputOutput的缩写,其含义是通用的输入输出。不同型号的STM32,其GPIO口的数量不同,STM32最多有7个GPIO口,依次定义为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG。每个GPIO口16个引脚,依次为PX0~PX15(X=A~G)。例如,GPIOA口的16个引脚为PA0~PA15。STM32F103RBT6有4个GPIO口,分别为GPIOA~GPIOD,STM32F103VET6有5个GPIO口,分别为GPIOA~GPIOE。1.初识GPIO口
STM32的GPIO口的功能与51单片机的并行口的功能相似,GPIO口的引脚一般具有多种功能。基本的功能是输入/输出高低电平,另外还具备其他功能,例如模拟输入功能,外部中断输入功能、串口数据输入/输出功能等复用功能。GPIO口作基本的输出口使用时,STM32可控制GPIO口的引脚输出高电平或者低电平,从而实现开关控制功能。例如,在GPIO口的引脚上接入发光二极管控制电路,STM32就可以通过GPIO口的引脚输出高电平或低电平来实现发光二极管的点亮或熄灭控制。1.初识GPIO口
GPIO口作基本的输入口使用时,STM32可以通过检测GPIO口引脚的电平状态来获知外部输入状态。例如,GPIO口的引脚上接入开关转换电路,STM32就可以通过检测GPIO口引脚是否为高电平来识别开关是否闭合。GPIO口作基本的输入/输出口使用时,可以以16位的方式并行输入/输出高低电平,每个引脚也可以以一位的方式输入/输出高低电平。1.初识GPIO口
GPIO口作基本的输入/输出口使用时,输入有:上拉输入、下拉输入、浮空输入(既无上拉也无下拉输入)3种输入方式。输出有:开漏输出、推挽输出2种输出方式。在STM32CubeMX中,这些输入/输出方式的表示如表所示。输入/输出模式STM32CubeMX中的表示说明上拉输入Pull-up
下拉输入Pull-down
浮空输入Nopull-upandnopulldown
开漏输出OutputOpenDrain需外部接上拉电阻才能输出高电平推挽输出OutputPushPullGPIO口输入/输出模式2.STM32的时钟源
时钟信号的作用是同步STM32内部各功能部件,使其按照统一的节拍协调工作,缺少了时钟信号,STM32就不能正常工作。时钟源是指时钟信号的来源。STM32有4个时钟源,分高频时钟源和低频时钟源2组,如图所示。STM32的时钟源2.STM32的时钟源
高频时钟源为STM32的主时钟源,它所产生的时钟信号经倍频和分频后形成系统时钟(SYSCLK),再经分频后为内部总线、定时器、串口、ADC等功能部件提供时钟信号。高频时钟源分内部高频时钟源(HSI)和外部高频时钟源(HSE)2种。STM32的时钟源2.STM32的时钟源
内部高频时钟源(HSI)为内部的高频RC振荡器,用来产生8MHz的时钟信号,RC振荡器起振快,但振荡频率的误差比较大,在频率误差要求不高的情况下可以选择内部高频时钟源(HSI)作为STM32的主时钟源。外部高频时钟源(HSE)为外部晶体振荡电路或陶瓷振荡电路,由OSC_IN引脚和OSC_OUT引脚之间所接的晶体振荡器或者陶瓷振荡器以及稳频电容构成。外部高频时钟源(HSE)用来产生频率精准的时钟信号,通常情况下其振荡频率选择8MHz。外部高频时钟源的频率精度高,STM32的主时钟源一般选择外部高频时钟源。STM32的时钟源2.STM32的时钟源
低频时钟源分内部低频时钟源(LSI)和外部低频时钟源(LSE)2种,主要是为内部实时钟控制器(RTC)、独立看门狗(IWDG)提供时钟信号。内部低频时钟源(LSI)为内部的低频RC振荡器,用来产生大约40KHz的时钟信号,其频率误差较大,主要是为独立看门狗(IWDG)提供时钟信号,也可以为内部实时钟控制器(RTC)提供时钟信号。外部低频时钟源(LSE)为外部的晶体振荡电路,由OSC32IN引脚和OSC32OUT引脚内部的放大电路以及这2个引脚上所接的晶振及稳频电容所构成,晶振的固有频率一般选32.768KHz。外部低频时钟源主要是为实时钟控制器提供时钟信号。STM32的时钟源3.STM32的程序启动模式
STM32的程序启动模式是指STM32复位后STM32从何处开始执行程序。STM32有3种程序启动模式,既可以从用户闪存中开始执行程序,也可以从系统存储器中开始执行程序,还可以从SRAM中开始执行程序。STM32的程序启动模式取决于BOOT0、BOOT1引脚的电平状态,它们之间的关系如表所示。BOOT0BOOT1启动模式说明0X用户闪存存储器复位后从FLASH存储器中启动,用于正常运行程序10系统存储器复位后从系统存储器中启动,用于串口下载11SRAM复位后从SRAM中启动,用于在SRAM中调试程序STM32的程序启动模式3.STM32的程序启动模式
用串口下载程序时,STM32的启动电路如图所示。图中,BOOT1通过电阻R2接地,BOOT1=0。BOOT0通过开关K1接VCC,同时通过电阻R3接地,K1闭合,BOOT0=1,STM32复位后从系统存储器中开始执行程序,STM32用串口下载程序。K1断开,BOOT0=0,STM32复位后从用户闪存中开始执行程序,STM32执行用户程序。由上可以看出,用串口下载程序的方法是,先闭合K1,然后复位STM32,待STM32下载完程序后再断开K1,最后再复位STM32。这样STM32就开始运行串口所下载的程序。STM32启动电路4.STM32的程序调试模式
STM32的程序调试模式有JTAG模式和SWD模式2种。JTAG是JointTestActionGroup的缩写,其含义是联合测试行动组,它是一种PCB和IC测试标准。标准的JTAG接口由JTMS、JTCK、JTDI、JTDO共4根线组成,它们的含义如右侧上表所示。SWD是SerialWireDebug的缩写,其含义是串行调试。SWD接口由SWDIO和SWDCLK共2根线组成,它们的含义如下表所示。在高速模式下SWD模式比JTAG更加可靠。所以,只要所选用的仿真器支持SWD调试模式,通常情况下用户就会选择SWD调式模式。接口线含义STM32中的引脚JTMS模式选择PA13JTCK时钟PA14JTDI数据输入PA15JTDO数据输出PB3接口线含义STM32中的引脚SWDIO串行数据输入输出线PA13SWDCLK串行时钟线PA14STM32的程序启动模式STM32的程序启动模式5.发光二极管的控制电路
发光二极管常用的控制电路如图所示。图a中,发光二极管LED1的阳极通过电阻R1接至正电源VCC,阴极接STM32的控制端PA0。PA0=0时,LED1亮,PA0=1时,LED1灭。即控制端口为低电平时,发光二极管亮。习惯上我们把这种发光二极管的控制叫低电平有效控制,简称为低有效控制。图b中,发光二极管LED1的阴极通过电阻R1接地,阳极接STM32的控制端口PA0。PA0=0时,LED1灭,PA0=1时,LED1亮,即控制端口为高电平时发光二极管点亮。这种控制叫高有效控制。图中,R1为限流电阻,用来保护发光二极管,R1的大小取决于发光二极管点亮时的电压降以及允许通过的电流,通常情况下取1KΩ的电阻。发光二极管的控制电路实现方法与步骤任务2的硬件电路:
1.搭建电路1.搭建电路图中,R1、C1和S1构成了STM32的复位电路,它们接在STM32的NRST引脚上。NRST引脚为STM32的复位脚,NRST=0时,STM32复位,NRST=1时,STM32正常工作。上电时,电源通过电阻R1对电容C1充电,由于电容两端电压不能突变,NRST端为低电平,STM32复位。过一段时间后,电容两端电荷充满,电容等效为开路,NRST端为高电平,STM32结束复位,开始运行程序。S1为复位按钮,按下S1,NRST端为低电平,STM32复位,同时释放C1两端电荷。断开S1后,电源通过电阻R1对电容C1充电,重复前面的上电复位过程。
任务2硬件电路图1.搭建电路R2、R3和K1为STM32的启动模式选择电路。K1闭合,BOOT0=1,BOOT1=0,按复位键S1,STM32运行系统存储器中的程序,STM32开始用串口下载程序,并将程序存放在FLASH存储器中。程序下载结束后断开K1,此时BOOT0=0,BOOT1=0,再按复位键S1,STM32运行FLASH存储器中的程序,即运行用串口所下载的程序。C2、C3、Y1、R4为晶体振荡电路,Y1为晶体振荡器,在电路中起反馈选频作用,它的固有频率即为振荡电路的频率。在主频振荡电路中Y1一般选用8MHz的晶体振荡器。R5~R12、LED1~LED8为8只发光二极管的控制电路,这8只发光二极管采用低有效控制。
任务2硬件电路图2.新建STM32CubeMX工程新建STM32CubeMX工程的方法如下:(1)在计算机的D盘新建“D:\ex”文件夹,用来保存各任务中的程序文件。(2)启动STM32CubeMX。双击桌面上的“”图标,打开如图所示的STM32CubeMX窗口。(3)新建工程。在STM32CubeMX窗口点击菜单栏上的【File】→【NewProject】菜单,打开新建工程对话框。
STM32CubeMX窗口2.新建STM32CubeMX工程(4)选择单片机第1步:在新建工程对话框中点击“MCU/MPUSelector”标签,然后在对话框左边的查找下拉列表框中输入开发板上所使用STM32的型号。本书配套开发板上所用的STM32为STM32VET6,所以应在查找下拉列表框中输入“STM32F103VE”,此时对话框右下方的“MCUs/MPUsList”列表中就会显示STM32F103VETx单片机,如图所示。
新建工程对话框2.新建STM32CubeMX工程(4)选择单片机第2步:用鼠标左键双击“MCUs/MPUsList”列表中的“STM32F103VETx”,打开如图所示的STM32CubeMX工程窗口。
STM32CubeMX工程窗口3.配置STM32的硬件资源(1)配置调试模式第1步:在工程窗口中单击“Pinout&Configuration”标签,然后点击左边的“Categories”标签,再在左边的列表框中点击“SystemCore”项,将“SystemCore”项展开。第2步:点击“SystemCore”项中的“SYS”子项,窗口的中间会展示出系统模式与配置窗口。第3步:系统模式与配置窗口中点击“Debug”下拉列表框,从展开的列表项中选择“SerialWire”列表项,将调试模式设置成串行线模式,此时窗口右边的引脚视图中的PA13、PA14引脚显绿色状,并且这2个引脚分别被配置成SYS_JTMS-SWDIO脚和SYS_JTCLK-SWCLK脚。
STM32CubeMX工程窗口3.配置STM32的硬件资源(2)选择高频时钟源第1步:在工程窗口中,点击左边列表框中的“RCC”列表项,窗口的中间会出现“RCCModeandConfiguration”(RCC模式与配置)窗口,如图所示。第2步:在RCC模式与配置窗口中点击“HighSpeedClock(HSE)”下拉列表框,从中选择“Crystal/CeramicResonator”列表项,即外部高速时钟为晶体/陶瓷谐振器,参考右图。
配置时钟源3.配置STM32的硬件资源(3)配置GPIO引脚从任务硬件电路可知,LED1~LED8采用低有效控制,本任务中需要将PE0~PE7配置成输出口。根据任务要求,应将PE口的PE0口输出低电平,其他7个引脚输出高电平,输出速度任意。配置PE0~PE7的方法如下:第1步:在工程窗口的引脚视图中,在右下角的查找引脚下拉列表框中输入引脚PE0(字符的大小写任意),然后按回车键Enter,此时引脚视图中的PE0引脚呈闪烁状态。然后单击引脚视图中的PE0引脚,在弹出的菜单中点击“GPIO_Output”菜单项,将PE0引脚设置为GPIO口的输出脚,如图所示。
设置PE03.配置STM32的硬件资源(3)配置GPIO引脚第2步:重复第1步,将PE1~PE7设置成输出脚。第3步:在工程窗口中,单击左边的“GPIO”列表项,窗口的中间就会出现GPIO口的模式与配置窗口,如右图所示。第4步:在图中单击GPIO口配置列表框中的PE0列表项,GPIO口配置列表框的下面就会出现“PE0Configuration”框架。第5步:在“PE0Configuration”框架中点击“GPIOoutputlevel”下拉列表框,从中选择“Low”,将PE0引脚的复位后的电平设置为低电平。配置GPIO口3.配置STM32的硬件资源(3)配置GPIO引脚第6步:按同样的方式将“GPIOmode”(GPIO口的模式)设置成“OutputPushPull”(推挽输出),将“GPIOPull-up/Pull-down”(GPIO口的上拉电阻和下拉电阻)设置成“NoPull-upandnopull-down”(无上拉电阻也无下拉电阻),将“Maximumoutputspeed”(最大输出速度)设置成“High”(高速)。配置GPIO口3.配置STM32的硬件资源(3)配置GPIO引脚第7步:重复第4步~第6步,将PE1~PE7引脚配置成输出高电平、推挽输出、既无上拉电阻也无下拉电阻,各引脚配置后的状态如右图所示。【说明】
GPIO配置窗口中允许将多引脚同时配置为相同的参数,以同时配置PE1~PE4这4个引脚为例,在GPIO口配置列表框点击PE1,然后按住Ctrl键后再点击PE2、PE3、PE4,PE1~PE4同时选中,然后在GPIO口配置列表框下面的Configuration框架中设置所选择GPIO的参数。各引脚配置后的状态3.配置STM32的硬件资源(4)配置时钟第1步:在STM32CubeMX的工程窗口中点击“ClockConfiguration”标签,进入时钟配置页面,如右图所示。第2步:设置外部高速时钟的时钟频率。在图所示的页面的“Inputfrequency”文本框中输入开发板上所接的晶振的频率,本例中晶振的频率为8MHz,所以此文本框中需输入8。第3步:点击“PLLSourceMux”(锁相环时钟源的多路开关)中的HSE单选钮,将锁相环的时钟源设置为外部高速时钟,此时PLL标签中将显示“8”。
时钟配置页面3.配置STM32的硬件资源第4步:单击“PLLMul”下拉列表框,将锁相环倍频系数设置成9。第5步:点击“SystemClockMux”(系统时钟多路选择开关)中的PLLCLK单选钮,将系统时钟的来源设置为锁相环时钟,此时SYSCLK标签中将显示“72”,表示此时系统时钟的频率为72MHz。第6步:单击“AHBPrescaler”下拉列表框,将AHB的预分频系统设置成1,此时HCLK(高性能总线时钟)的频率刚好为其最大值72MHz。第7步:单击“APB1Prescaler”下拉列表框,将APB1的预分频系统设置成2,此时PCLK1的频率刚好为其最大值36MHz。
【说明】
在时钟配置页面中,如果某处的时钟频率超过了其最大值,则对应的文本框将呈红色显示,此时修改其对应的分频系数或倍频系数。时钟配置页面4.管理STM32CubeMX工程步骤第1步:在STM32CubeMX的工程窗口中点击“ProjectManager”标签,进入工程管理页面。第2步:在页面的“ProjectName”文本框中输入工程名“Task2”,然后单击“ProjectLocation”下面的“Browse”按钮,打开“ChooseProjectFolder”对话框,在对话框中选择保存工程的文件夹“D:\ex”,此时“ProjectLocation”下面的文本框中将显示保存工程文件的文件夹“D:\ex”。工程管理页面4.管理STM32CubeMX工程第3步:单击“Toolchain/IDE”下拉列表框,从中选择我们后面进行STM32开发时所用的开发工具“MDK-AMRV5”,即Keil5。其他的项选择默认值。第4步:在右图所示的工程管理页面中,单击页面左边的“CodeGenerator”标签,页面的右边就会显示代码生成器的配置选项。
工程管理页面4.管理STM32CubeMX工程第5步:在右图的页面中,单击“Copyonlythenecessarylibraryfiles”(只复制必要的库文件)单选钮。第6步:在“Generatedfiles”框架中勾选“Generateperipheralinitializationasapairof‘.c/.h’filesperperipheral”复选框,使STM32CubeMX在生成代码时为每个外设生成一对‘.c/.h’的外设初始化文件。第7步:在窗口中单击菜单栏上的“File”→“SaveProject”菜单项,或者按快捷键Ctrl+S,保存工程文件。代码生成器配置5.生成Keil工程代码步骤(1)在STM32CubeMX工程窗口中单击“GENERATECODE”按钮,STM32CubeMX将会按照用户的配置要求生成C语言程序代码,并显示代码生成的进度,如右侧上图所示。代码生成结束后会出现如下图所示的代码生成提示框。(2)在代码生成提示框中单击“OpenProject”按钮,系统就会调用Keil5,并打开当前所生成的工程。(3)关闭STM32CubeMX工程窗口。产生代码代码生成提示框5.生成Keil工程代码步骤(4)在Keil5集成开发环境中,单击“Project”窗口中“Application/User”文件夹前面的“+”号,打开文件夹,找到main.c文件名,然后双击main.c文件名,集成开发环境的右边窗口中就会显示main.c文件的内容,如下图所示。打开main.c文件6.配置Keil工程步骤Keil工程的配置主要是配置Keil的输出文件。目的是,让Keil工程编译时能产生STM32的执行文件(Hex文件),以便后续用串口将此Hex文件下载至STM32中。第1步:在Keil窗口中单击目标选项图标按钮“”,打开如右图所示的“OptionforTarget”对话框。第2步:在“OptionforTarget”对话框中单击“Output”标签,进入Output页面。“OptionforTarget”对话框6.配置Keil工程步骤第3步:在Output页面中勾选“CreateHEXFile”复选框。如果要修改hex文件存放的位置,则可点击Output页面中“SelectfolderforObject”按钮,然后在弹出的对话框中选择hex文件存放的位置。第4步:在“OptionforTarget”对话框中单击“OK”按钮,完成输出文件的配置。Output页面7.编译连接程序配置好工程后就可以进行编译、连接了,以便生成STM32可以直接执行的16进制文件(HEX文件)。编译、连接的方法是,在Keil工程窗口中,单击图标工具栏上的重新编译连接图标按钮“”,如右图所示。这时,Keil窗口下面的“BuildOutput”窗口中会显示编译信息,如果源程序中存在语法上的错误,输出窗口中将会有错误报告出现,双击错误报告行,可以定位到出错的位置。对源程序反复修改后最终会得到如右图所示的结果。提示生成了Hex文件错误数报告编译连接重新连接BuildOutput窗口Keil工程窗口8.下载程序程序下载有用仿真器下载、用串口下载等多种方式,用仿真器下载程序适用于手中有源程序的情况,用串口下载程序常用于手中无仿真器或者没有源程序而只有Hex文件的情况。任务2中我们用串口下载程序,下载软件为mcuisp,下载程序的方法如下:第1步:按照前面介绍的方法编译连接程序。第2步:用USB线连接计算机与开发板,并给开发板上电。第3步:在开发板上将程序运行模式开关拔至“接VCC”位置,即使K1处于闭合状态,也就是STM32复位后从系统存储器中启动程序。第4步:按开发板上的复位键,让STM32复位,STM32就从系统存储器中启动程序。第5步:按照任务1中所介绍的方法查看USB口映射的串口号,并记录其串口号。
8.下载程序第6步:在文件夹中找到“mcuisp.exe”文件,然后双击“mcuisp.exe”文件,打开mcuisp工作窗口。第7步:在mcuisp工作窗口中点击菜单栏上的“Port”菜单,“Port”菜单中就会以子菜单的形式显示计算机中当前可用的串口号,然后点击“COM3:空闲USB-SERIALCH340”菜单项(第5步所看查到的串口号)。第8步:在mcuisp工作窗口中点击打开文件按钮“”,打开“选择要下载的文件”对话框。mcuisp工作窗口选择下载的串口8.下载程序第9步:在“选择要下载的文件”对话框的文件路径下拉列表框中选择下载文件所在位置“D:\ex\Task2\MDK-ARM\Task2”,在文件格式下拉列表框中选择文件类型“hex、a79、sim”,对话框中间的列表框中会显示文件夹中所有hex、a79、sim文件,如右图所示。然后点击我们所要下载的文件“Task2.hex”,再点击“打开”按钮,mcuisp工作窗口的“联机下载时的程序文件”文本框中会显示所要下载的文件“D:\ex\Task2\MDK-ARM\Task2\Task2.hex”。选择文件对话框8.下载程序第10步:在mcuisp工作窗口中点击“STMISP”标签名,然后在“STMISP”标签中点击“开始编程”按钮,再按开发板上的复位键,mcuisp软件就会用所选的串口将Task2.hex文件下载至STM32中,程序下载结束后,窗口右边会显示下载的结果提示。第11步:将开发板上的程序运行模式开关拔至“接地”位置,让STM32复位后从FLASH存储器中启动程序,然后按开发板上的复位键,我们可以看到开发板上LED1点亮,其他发光二极管熄灭。mcuisp工作窗口实践总结与拓展
基于STM32CubeMX的软件开发方式是现在和今后STM32应用程序的主要开发方式,这种方式只需在STM32CubeMX的示意图中作一些简单的选择和配置,无需详细了解STM32的工作原理和API函数,就可以生成STM32的硬件驱动程序。这种方式的一般步骤是:(1)在STM32CubeMX中配置调试方式、系统时钟、GPIO口等片上外设;(2)用STM32CubeMX生成Keil工程文件和HAL库代码;(3)在C程序的指定位置处添加用户代码;(4)编译调试;(5)下载运行。STM32的程序下载有多种方式,目前比较流行的方式主要有2种,一是用串口下载,二是用仿真器下载。任务2中主要介绍了用串口下载程序的方法,其下载软件是mcuisp,它是实际应用中常用的一种方法。STM32的程序下载是STM32应用中的最基本技能,必须熟练掌握。本任务到此结束,谢谢!任务3控制LED闪烁任务要求STM32的PE0引脚上接有发光二极管的控制电路,发光二极管采用低电平有效控制,编号为LED1。要求用STM32CubeMX对STM32进行适当配置,然后生成Keil工程代码,再在Keil中添加相关的程序代码,使LED1按每秒1次的频率进行闪烁显示。知识储备
1.Keil工程的结构任务2中,Keil工程文件为Task2.uvprojx,双击该文件就可以打开如图所示的Keil工程窗口。由图可以看出Keil工程的窗口主要由菜单栏、图标工具栏和3个小窗口组成。左边的小窗口为工程窗口,用来显示Keil工程的工程名、工程中的组以及各组所包含的文件。右边的小窗口为文件编辑窗口,用来显示、编辑所打开的文件。文件编辑窗口中显示的是main.c文件。下边的窗口是编译输出窗口,用来显示编译连接的过程和编译连接的结果。用STM32CubeMX生成的Keil工程1.Keil工程的结构
在工程窗口中,第1行Project后面的字符为工程名Task2。点击Project左边的“+”号,将Task2工程展开,Task2工程主要由Application/MDK-ARM、Application/User、Drivers/STM32F1xx_HAL_Driver和Drivers/CMSIS等4个组组成,再点击各个组名前面的“+”,将组展开,可以看到各个组包含了若干个文件。这4个组的作用如表所示。组组内文件功能Application/MDK-ARMstartup_stm32f103xe.s启动文件Application/Usermain.cgpio.cstm32f1xx_it.cstm32f1xx_hal_msp.c用户编程文件Drivers/STM32F1xx_HAL_Driverstm32f1xx_hal_gpio_ex.cstm32f1xx_hal_tim.cstm32f1xx_hal_tim_ex.cstm32f1xx_hal.cstm32f1xx_hal_rcc.cstm32f1xx_hal_rcc_ex.cstm32f1xx_hal_gpio.cstm32f1xx_hal_dma.cstm32f1xx_hal_cortex.cstm32f1xx_hal_pwr.cstm32f1xx_hal_flash.cstm32f1xx_hal_flash_ex.cstm32f1xx_hal_exti.cHAL(硬件抽象层)库函数文件Drivers/CMSISsystem_stm32f1xx.c系统初始化文件Task2工程中的组2.程序编写规范
用STM32CubeMX生成Keil工程时,Keil工程中的C程序是按照标准的模块化程序结构设计的,用户在main.c文件中编写程序时,需要我们遵守职业规范,按照模块化程序设计的要求,将程序代码填写在main.c文件中各个指定的地方。用户代码需要填写在各自的“USERCODEBEGIN”和“USERCODEEND”之间。2.程序编写规范
以任务2中main.c文件为例,用户的头文件包含、自定义类型、变量定义、函数说明等部分的填写位置如表所示。行号代码21222324252627282930313233343536373839/*Includes--*/#include"main.h"//22行、23行为系统生成的头文件包含#include"gpio.h"/*Privateincludes--*//*USERCODEBEGINIncludes*///用户头文件包含区,此处填写用户的头文件包含代码/*USERCODEENDIncludes*//*Privatetypedef*//*USERCODEBEGINPTD*///用户数据类型定义区,此处填写用户的类型定义(typedef)代码/*USERCODEENDPTD*//*Privatedefine*//*USERCODEBEGINPD*///用户符号定义区,此处填写用户定义(define)符号/*USERCODEENDPD*/头文件包含、自定义类型、函数说明等部分的填写位置2.程序编写规范
表中的行号是代码所在行在main.c文件中的行号,代码中的中文注释是有关用户代码填写位置的说明。行号代码40414243444546474849505152535455/*Privatemacro*//*USERCODEBEGINPM*///用户宏定义区,此处填写用户宏定义代码/*USERCODEENDPM*//*Privatevariables*//*USERCODEBEGINPV*/
//用户全局变量定义区,此处填写定义全局变量的代码/*USERCODEENDPV*//*Privatefunctionprototypes*/voidSystemClock_Config(void);//系统生成的函数说明/*USERCODEBEGINPFP*/
//用户函数原型说明区,此处填写用户函数说明的代码/*USERCODEENDPFP*/头文件包含、自定义类型、函数说明等部分的填写位置2.程序编写规范
用户函数的定义和函数调用语句的填写位置如表所示。行号代码57585960…666768697071727374757677/*Privateusercode*//*USERCODEBEGIN0*/
//用户代码0区,此处填写用户自定义的函数/*USERCODEEND0*/……intmain(void)//main()函数{/*USERCODEBEGIN1*/
//用户代码1区,此处定义main()函数中的局部变量/*USERCODEEND1*/
/*MCUConfiguration*//*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/HAL_Init();函数定义和函数调用语句的填放位置2.程序编写规范
行号代码7879808182838485868788899091929394/*USERCODEBEGINInit*//*USERCODEENDInit*//*Configurethesystemclock*/SystemClock_Config();/*USERCODEBEGINSysInit*//*USERCODEENDSysInit*//*Initializeallconfiguredperipherals*/MX_GPIO_Init();/*USERCODEBEGIN2*/
//用户代码2区,此处填写其他硬件软件初始化代码/*USERCODEEND2*/函数定义和函数调用语句的填放位置2.程序编写规范
行号代码9596979899100101102103104…143144145/*Infiniteloop*//*USERCODEBEGINWHILE*/while(1){//while(1)代码区,此处填写CPU要反复处理的事务(while(1)中的代码)/*USERCODEENDWHILE*//*USERCODEBEGIN3*/}/*USERCODEEND3*/}……/*USERCODEBEGIN4*///用户代码4区,此处填写用户函数定义/*USERCODEEND4*/函数定义和函数调用语句的填放位置3.GPIO口输出特性
GPIO口一位引脚的结构如图所示。图中右边为端口保护结构图,下面是数据输出结构图,上面是数据输入结构图。端口保护由2只二极管组成。当I/O引脚输入电压高于VDD时,上面的二极导通,端口上的电压钳位在VDD上。当I/O引脚输入电压低于VSS时,下面的二极导通,端口上的电压钳位在VSS上。这样可防止过高或过低的输入电压损坏芯片。GPIO口一位引脚的结构图3.GPIO口输出特性
数据输出主要有3种,一是写入“位设置/清除寄存器”的位输出,二是直接写入“输出数据寄存器”的16位并行输出,三是来自片上外设的复用功能输出。由上可以看出,STM32的GPIO口既可以位输出,又可以并行输出。GPIO口一位引脚的结构图3.GPIO口输出特性
输出驱动器由输出控制、P-MOS管和N-MOS管构成。P-MOS管和N-MOS管为输出驱动级,可以实现推挽输出和开漏输出2种输出模式。推挽输出是指输入至输出驱动器的电平分别为0和1时,输出级的P-MOS管和N-MOS管轮流导通和关闭。推挽输出具有较大的驱动能力和很高的开关速度,GPIO口作输出口使用时,通常是将其设置为推挽输出模式。GPIO口一位引脚的结构图3.GPIO口输出特性
开漏输出,输出驱动级的P-MOS管始终处于关闭状态,输出驱动级只有N-MOS管工作,N-MOS管的漏极与电源是断开的。当输出驱动器的输入为0时,N-MOS管导通,输出级输出低电平0;当输出驱动器的输入为1时,N-MOS管关闭,输出级不能正常输出高电平1。开漏输出需要在I/O引脚上外接上拉电阻,才能向负载输出高电平1。GPIO口一位引脚的结构图3.GPIO口输出特性
开漏输出常用于I2C等需要实现“线与”功能的场合。另外,需要输出高于3.3V高电平的场合中也常将GPIO口的输出设置为开漏输出。例如,若需要GPIO口输出5V的高电平,就可以将GPIO口的输出设置为开漏输出,而在I/O引脚上对5V电源接一个上拉电阻。GPIO口一位引脚的结构图4.GPIO口的输出函数
HAL库中共定义了8个GPIO函数,这些函数的定义位于stm32f1xx_hal_gpio.c文件中,它们的说明位于stm32f1xx_hal_gpio.h文件中。这8个GPIO函数如图所示。在这8个函数中,HAL_GPIO_WritePin()、HAL_GPIO_TogglePin()是GPIO口输出操作函数,HAL_GPIO_Init()和HAL_GPIO_DeInit()是GPIO口初始化函数。GPIO函数4.GPIO口的输出函数
(1)HAL_GPIO_WritePin()函数原型voidHAL_GPIO_WritePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,GPIO_PinStatePinState);功能设置引脚的状态,即将输出引脚设置成1或0。参数1GPIOx:引脚所在的端口,取值为GPIOA~GPIOH。参数2GPIO_Pin:引脚编号。取值为GPIO_PIN_0~GPIO_PIN_15、GPIO_PIN_All或者GPIO_PIN_0~GPIO_PIN_15中多个引脚按位或。GPIO_PIN_i代表的是第i位为1其他位为0的二进制数,可以用1<<i表示。GPIO_PIN_All代表的是0xffff。参数3PinState:所要设置的状态。取值为GPIO_PIN_RESET(0)、GPIO_PIN_SET(1)。GPIO_PIN_RESET和GPIO_PIN_SET是2个枚举值,不能用数值0、1表示,否则程序编译会出现警告错误。返回值无。函数的用法4.GPIO口的输出函数
(1)HAL_GPIO_WritePin()函数【举例】HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_SET);//将PB11置1HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5|GPIO_PIN_7,GPIO_PIN_SET);//将PB5、PB7置1HAL_GPIO_WritePin(GPIOE,(1<<3)|(1<<4),GPIO_PIN_RESET);//将PE3、PE4清04.GPIO口的输出函数
(2)HAL_GPIO_TogglePin()函数【举例】HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);//将PB11的状态取反原型voidHAL_GPIO_TogglePin(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin);功能将指定的GPIO引脚的状态取反。参数1GPIOx:引脚所在的端口,取值为GPIOA~GPIOH。参数2GPIO_Pin:引脚编号。取值为GPIO_PIN_0~GPIO_PIN_15、GPIO_PIN_All或者GPIO_PIN_0~GPIO_PIN_15中多个引脚按位或。GPIO_PIN_i代表的是第i位为1其他位为0的二进制数,可以用1<<i表示。GPIO_PIN_All代表的是0xffff。返回值无。函数的用法4.GPIO口的输出函数
(3)HAL_GPIO_Init()函数原型voidHAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init);功能用指定的参数初始化GPIO口。参数1GPIOx:引脚所在的端口,取值为GPIOA~GPIOH。参数2GPIO_Init:存放初始化参数的结构体变量的指针。返回值无。说明该函数主要用于系统初始化时调用,如果在系统运行的过程中不更改引脚的配置,用户一般不使用该函数。函数的用法4.GPIO口的输出函数
(3)HAL_GPIO_Init()函数该函数的使用方法是,先定义一个GPIO_InitTypeDef型的结构体变量,然后对该变量的各成员赋初值,再调用该函数配置GPIO口。其中,GPIO_InitTypeDef类型的定义如下:typedefstruct{uint32_tPin;/*所要配置的引脚*/uint32_tMode;/*引脚工作的模式*/uint32_tPull;/*引脚上拉还是下拉*/uint32_tSpeed;/*引脚的工作速度*/}GPIO_InitTypeDef;4.GPIO口的输出函数
(3)HAL_GPIO_Init
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商品合作协议合同范例
- 天府新区信息职业学院《织员工激励》2023-2024学年第一学期期末试卷
- 个人买钢材写合同范例
- 天府新区信息职业学院《高等代数(I)》2023-2024学年第一学期期末试卷
- 会议协议合同范例
- 兄弟拆迁安置合同范例
- 机械维修厂转让合同范例
- 上海it培训合同范例
- 三级物业管理师模拟练习题及答案
- 卡车租赁合同范例
- 24秋国家开放大学《社会教育及管理》形考任务1-3参考答案
- 我们为什么要努力学习-励志主题班会(课件)
- 2024-2030年中国移动机器人(AGV)应用市场需求分析及投资战略研究报告
- 中华人民共和国能源法
- 常见急救知识培训
- 班组长心理培训课件
- GB/T 44685-2024印刷机械油墨干燥及固化装置能效评价方法
- 产品质量检测服务行业营销策略方案
- 佛吉亚卓越体系知识手册
- GB/T 32151.29-2024温室气体排放核算与报告要求第29部分:机械设备制造企业
- 某制药厂房空调自控系统URS文件
评论
0/150
提交评论