1、实验准备
实验目标:点亮LED
器材:海创stm32开发板和数据线
2、CubeMX初始化
2.1 新建工程
打开STM32CubeMX软件(V6.6.1),点击左上角"File",再点击“New Project”。
在出现的左上角搜索框里直接输入“STM32F103C8T6”,在下方会出现两个芯片,选择“STM32F103C8T6”,再点击右上角的“Start Project”。
2.2配置RCC时钟源
接下来配置MCU的各种资源和外设,我们按照配置RCC->SYS->GPIO的顺序来。大家有发现这3个配置首字母为R、S、G,为了查找方便,在左侧选择“A->Z”,即各种配置的名称会按照字母顺序排列。
选择“RCC”,出现两个选项。第一个选项 High Speed Clock(HSE),用于配置 HSE。第二个选项 Low Speed Clock(LSE),用于配置 LSE。我们都选择“Crystal/Ceramic Resonator”,意思是使用晶振/陶瓷振荡器。
配置完成后观察操作界面右侧的芯片引脚配置。芯片左侧相应的引脚由灰色变为绿色,表示该引脚被使用。
2.3配置SYS
选择“SYS”,在Debug中选择“Serial Wire”。
这个选项容易被忽视。在我们的开发板可以通过下图4个引脚使用STLINK-V2下载调试程序,如果未配置“Debug”选项,有可能会导致下载一次后不能再次下载。
在配置完“Debug”后,发现PA13和PA14引脚被使用。在项目中如果发现引脚数目有限,可以考虑使该两个引脚不用做调试引脚。
2.4配置GPIO引脚
接下去配置GPIO引脚,选择左侧的“GPIO”。
根据原理图可知,我们使用PA7或者PA8控制LED,以PA7为例。
点击PA7引脚,选择“GPIO_Output”。
在软件操作界面中出现下图,选中①处PA7引脚,②处出现引脚配置界面。
根据下图进行配置。
①处表示有效电平状态。根据原理图可知,低电平点亮,因此我么配置“LOW”。
②处表示输出模式,有推挽(Output Push Pull)和开漏(Output Open Drain)两者模式选择。关于两者模式具体不展开,目前选择推挽模式。
③处上下拉模式。有三个选项,依次表示不上拉或下拉/上拉/下拉。实验中我们选择上拉。
④处表示引脚传输速度,选项依次表示低速/中/高。实验中没特殊要求,选择低速即可。
⑤表示引脚标签,也就是别名的意思。按照以往取名方式,我们就取LED2。
2.5配置时钟
选择“Clock Configuration”。
根据①②③④依次配置,关于时钟部分可参考阶段一时钟部分相关视频,由于考虑到CubeMX软件配置的便利性及大部分使用的情况,目前大家只需按下图配置即可。
2.4工程设置
点击右上角“GENERATE CODE”。
弹出一个提示对话框,意思是工程的名字不能空,①处确实为空,因此我们要设置工程名字,例如“demo”。
这里涉及到工程存储位置的问题,我们可以先在桌面新建一个文件夹,命名为demo。
按①②③④配置,②即为将工程保存到刚刚新建的demo文件夹。③处表示IDE的选择,目前本人主要使用MDK,因此选择“MDK-ARM”,④处可以选择“V5”,意思是MDK版本不能低于V5。
“Project”配置完成后,点击“Code Generator”,如②所示。
按照红色框进行配置,对①~⑦选项进行简单介绍。
①将HAL库的所有库文件都复制到新建的工程文件中;
② 只复制所需要的库文件;
③不复制文件,直接从软件包存放位置导入库函数。
建议选择②。①项选择会导致整个文件大,编译时间长。③项缺点是如果将程序复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径。②项也有缺点,如新增外设,需要重新用STM32CubeMX导入,但是综合来看②项相对合适。
④每个外设生成单独的.c/.h文件,根据以往经验建议勾选上。
⑤重新生成代码时,会在相关目录中生成一个Backup文件夹,将之前源文件拷贝到其中。程序员对此比较熟悉,也主要看大家需要。
⑥重新生成时保留用户代码。在本次实验中我会在在main.c中添加了一段代码,重新生成时会在main.c中保留之前添加过的这段代码。这里有个前提,代码写在规定的位置,否则同样会删除。什么叫规定的位置,以后会提到。
⑦翻译起来比较拗口,举个例子,比如之前在项目中使用到了IIC,通过配置会生成IIC文件,现在不需要了,重新生成文件的话我们一般也希望IIC相关文件会删除掉,因此建议勾选。
2.5生成代码
点击右上角“GENERATE CODE”。
出现对话框,这里我选择“Close”,大家根据需要即可。
3、功能实现
3.1 程序编写
STM32CubeMX软件初始化完成后,接下去需要添加代码功能实现部分。找到demo.uvprojx文件,双击打开。
打开工程后建议大家先把工程编译一下,找到“main.c”,双击打开,根据下图在指定位置输入HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);。
编译一下,0错误,0警告。
3.2代码烧录
打开烧录软件,目前这款会自动找到Port,如①处所示,如果没有自动搜索到,点击“搜索串口”;在②处找到hex文件;③处设置“不使用RTS和DTR”。
准备工作完成后,点击“开始编程”,按住BOOT0按键,按下STM复位按键,松开STM复位按键,松开BOOT0按键,程序开始烧录。
4、实验现象
观察开发板,LED点亮。
这里有个小bug,该LED丝印层标为LED3。程序中我们设置该LED名字为LED2,稍微有点混,下次通过视频讲解下这个问题,大问题也没有。到目前为止成功点亮LED。