在(一)工具配置 完成后,就可以根据题目要求计划外设的使用了。接下来以“让一颗LED灯一秒闪烁一次”项目为例,来说明。
目录
重要提醒:一定要在用户代码段内写程序,不然使用CubeMX重新生成代码后,你的代码就被覆盖了!
一、需求分析
分析很重要,这可以为你节省不少时间。
1、预估需要使用到的外设资源(最好打个草稿):
一个GPIO引脚。
2、外设具体分析(比赛时原理图会给出,要熟悉开发板的原理图):
(如果找不到,使用PDF查看器的搜索功能)
根据原理图,先看主控部分,选择PC8引脚,来控制LED1。
再看LED部分,可以看到,这里有一个芯片,去资料包中找到这个芯片的手册(当然,按理说再比赛前你已经熟悉这个芯片了。况且,提供的资料有可能是英文...)
查阅手册可知,这是一个可控的锁存芯片。
功能:
芯片一直可以读取输入端数据。但是,只有当PD2为高时,才可以改变芯片内的数据。当PD2为低时,数据被芯片锁存,不随输入端变化。
所以,要先写入数据,然后使PD2为高,改变芯片内数据,然后使PD2为低,锁存数据。
所以需要配置两个GPIO引脚,PC8和PD2,都是推挽输出,PC8初始化为SET,PD2初始化为RESET,其余默认。
3、软件分析(在草稿上简单写一下):
PC8输出低电平,LED1点亮;
使PD2为高电平。
使PD2为低电平。
延时500m;
PC8输出高电平,LED1熄灭;
使PD2为高电平。
使PD2为低电平。
延时500m;
二、软件配置
1、工程文件
在"test"文件里,复制刚刚运行通过的"test1"文件(在上一篇文章中),粘贴到"object"文件夹.
将名称改为你需要的名称。
这里改为"LightLED",然后打开文件,将"test1.ioc"改为"LightLED.ioc",删除其他文件。
如图:
2、功能配置
双击打开"LightLED.ioc",你可以找到PC8,但为了节约时间,直接在右下角搜索"PC8"
左键点击黑色的PC8,选择"GPIO_Output"
右键点击PC8,选择"Enter User Label",设置用户标签,我认为这一步比较重要,但是有很多人为了节省时间就不命名。命名后,后面直接写就行,不用再看手册了,更节省时间。
这里命名为"LED1",与原理图对应。
打开"System Core"——>"GPIO",可以看到PC8的信息。
在下面的"PC8 Config..."里按照之前的分析修改,如图:
PD2 的操作也类似,完成后效果如下:
完成所有配置后,点击"GENERATE CODE",然后打开项目。
三、代码编写
1、导入所需驱动程序的路径
这里插入一个本示例不需要但是常用的操作。
大多数比赛题目都会用到LCD屏幕,这就涉及到导入文件路径。操作如下
(1)找到提供的LCD驱动程序
(2)
复制文件"lcd.h"和"fonts.h"到"\object\LightLED\Core\Inc"
复制文件"lcd.c"到"\object\LightLED\Core\Src"
(3)回到MDK软件,在左边的栏子里打开如下图所示路径
右击"Applicatioin/User/Core",选择下图中 黄色 指示的选项。
在查找范围里找到Src
选中"lcd.c",点击"Add"。
文件完成导入,最好直接在"main.h"的如下代码段进行 include操作,因为CubeMX生成的文件中基本上都会引用main.h。
点击 main.c 左侧的加号,展开的目录里可以找到main.h 。
2、在用户代码段编写程序
重要提醒:一定要在用户代码段内写程序,不然使用CubeMX重新生成代码后,你的代码就被覆盖了!
找到如下用户代码段,在有"BEGIN"和"END"字样的注释之间编写代码,按照注释分配你的内容。
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
根据之前的分析,编写程序:
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); //PC8为低电平,点亮LED1
HAL_GPIO_WritePin(LED_LE_GPIO_Port,LED_LE_Pin,GPIO_PIN_SET); //PD2为高电平,使能
HAL_GPIO_WritePin(LED_LE_GPIO_Port,LED_LE_Pin,GPIO_PIN_RESET); //PD2为低电平,锁存
HAL_Delay(500);
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); //PC8为高电平,点亮LED1
HAL_GPIO_WritePin(LED_LE_GPIO_Port,LED_LE_Pin,GPIO_PIN_SET); //PD2为高电平,使能
HAL_GPIO_WritePin(LED_LE_GPIO_Port,LED_LE_Pin,GPIO_PIN_RESET); //PD2为低电平,锁存
HAL_Delay(500);
/* USER CODE END WHILE */
//省略...
可以看到这里有明显的代码冗余,所以最好封装起来,以后会编写专门的驱动程序。
3、编译、下载,运行
点击编译按钮,没有错误后,进行下列操作:
(1)将USB下载线插到电脑上
在MDK中,点击左上角的魔术棒
在这个位置:
(2)点击"Debug",在"Use"处下拉选择"CMSIS...",然后点击"Settings"。
(3)点击"Reset and Run"
勾选下列选项:
(4)点击下载按钮,下载,观察现象。
结语
由于很多底层驱动程序都还没有编写,所以在以后我会发一篇对所有项目都通用的文章。