【蓝桥杯嵌入式】三、基本操作(二)基本项目

        在(一)工具配置 完成后,就可以根据题目要求计划外设的使用了。接下来以“让一颗LED灯一秒闪烁一次”项目为例,来说明。

目录

一、需求分析

二、软件配置

1、工程文件

2、功能配置

三、代码编写

1、导入所需驱动程序的路径

2、在用户代码段编写程序

重要提醒:一定要在用户代码段内写程序,不然使用CubeMX重新生成代码后,你的代码就被覆盖了!

3、编译、下载,运行

结语


一、需求分析

分析很重要,这可以为你节省不少时间。

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)点击下载按钮,下载,观察现象。

结语

由于很多底层驱动程序都还没有编写,所以在以后我会发一篇对所有项目都通用的文章。

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值