蓝桥杯嵌入式(stm32CubeMx+keil5 开发)

本文详细介绍了如何使用STM32CubeMX创建新工程,配置STM32G431RBT6的外设,包括GPIO输入输出模式设置,LED控制函数和键盘扫描函数的编写,以及在主函数中集成这些功能实现LED灯响应按键操作的示例。
摘要由CSDN通过智能技术生成

一、stm32CubeMx新建工程

 1.打开stm32CubeMx软件后

2.选择需要开发的芯片:STM32G431RBT6

3.时钟配置:选择外部时钟

4.时钟树配置

3.外设配置

 (1)KEY(原理图)

  PA0、PB0、PB1、PB2这几个GPIO口配置为GPIO——InPut模式----No Pull up and pull down(默认)

(2)LED(原理图)

PC8 -----PC15-----> GPIO_output模式 ---->GPIO ---->Hight(灭);

PD2------>GPIO_output模式-------Low(使能端)

(3)生成工程

(4)生成的keil 工程

(6)添加自己的bsp文件夹(驱动代码)

(7)建立各个驱动子文件夹

(8新建各个驱动的头文件和源文件

(9)Keil中新建BSP文件夹

(10)Keil中添加源文件

注意:返回上一层后添加代码

(11)点击keil工具栏中的魔法棒添加头文件路径

注意:文件的目录添加存在头文件目录的上一级目录即可。

(12)在.c和.h文件中添加自己的代码

led.c代码:

#include "led.h"


//函数名:LED_Disp
//入口参数:ucLed
//出口参数:void
//函数功能:LD8-LD1对应ucLed的8个位
void LED_Disp(unsigned char ucLed)
{
	//**将所有的灯熄灭
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
												|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);		
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);

	//根据ucLed的数值点亮相应的灯
	HAL_GPIO_WritePin(GPIOC, ucLed<<8, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);		
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);	
	
}



key.c代码:

#include "key.h"
#include "key.h"

unsigned char Key_Scan(void)
{
	unsigned char unKey_Val = 0;
	
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET)
		unKey_Val = 1;

	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET)
		unKey_Val = 2;

	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == GPIO_PIN_RESET)
		unKey_Val = 3;
	
	if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
		unKey_Val = 4;	
	
	return unKey_Val;
}









(13)在main函数中添加代码实现功能key1按下8个LED灯全灭,key4按下8个LED灯全亮

实现功能的代码:

void Key_Proc()
{
	if((uwTick - uwTick_Set_Point) < 100) return;
	 uwTick_Set_Point = uwTick;
	ucKey_Val = Key_Scan();
//情况1: 100ms两次扫描,按键得到的结果从0 (都没按下)到B4按下,产生了下降沿。
//ucKey_Val = 4(0000 0100)
//unKey_Down = 0000 0100 & ( 0000 0000 ^ 0000 0100) = 0000 0100 & 0000 0100 = 0000 0100 (4)
//ucKey_Up = 1111 1011 & 0000 0100 = 0000 0000
//ucKey_Old = 4
//情况2: B4产生了下降沿后,按键一直按着
//ucKey_Val = 4(0000 0100)
//unKey_DownT= 0000 0100 & ( 0000 0100 ^ 0000 0100) = 0000 0100 & 0000 0000 = 0000 0000 (0)
//ucKey_Up = 1111 1011 & 0000 0000 = 0000 0000
//ucKey_0ld = 4
//情况3: B4按键一直按着随后弹起
//ucKey_Val = 0(0000 0000)
//unKey_Down = 0000 0000 & ( 0000 0100 ^ 00000000) = 0000 0000 & 0000 0100 = 0000 0000 (0)
//ucKey_Up = 1111 1111 & 0000 0100 = 0000 0100 (4)
//ucKey_Old = 0

	unKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val); 
	ucKey_Up = ~ucKey_Val & (ucKey_Old ^ ucKey_Val);	
	ucKey_Old = ucKey_Val;
	if(unKey_Down == 4)
	{
		LED_Disp(0xff);
		
		
	}
	if(unKey_Down == 1)
	{
		LED_Disp(0x00);
	}
	
}

(14)在main函数的while循环中调用实现功能的代码

注意:不要忘记在main函数上面声明:void Key_Proc();

还要注意的是:

以上添加的话,以下这样包含:

另外一种包含:

(15)成功案例

### 使用STM32CubeMXKeil5联合进行项目开发 #### 配置环境 为了使STM32CubeMXKeil5协同工作,在开始任何编码之前,需确保两者都已正确安装并配置好。通过STM32CubeMX可以轻松生成初始化代码框架,而Keil5则用于编译和调试这些代码。 #### 创建新项目 启动STM32CubeMX软件后,选择目标微控制器型号,并按照向导指引完成基本设置。这一步骤涉及定义时钟树、外设以及中断优先级等内容[^1]。 #### 外设配置 对于特定应用需求,比如控制LED或处理按键输入,可以在STM32CubeMX界面上直观地调整相应GPIO引脚的功能及其参数。此外,还可以启用其他必要的硬件资源,如UART接口等[^2]。 #### 生成源码 当所有必要组件都被适当设定完毕后,点击`GENERATE CODE`按钮来让STM32CubeMX自动生成适用于所选MCU平台的基础驱动程序和支持库。此时还会同步构建一个兼容于Keil5 IDE的工作空间文件夹结构[^3]: ```plaintext . ├── Drivers/ │ ├── CMSIS/ # ARM内核相关头文件及描述信息 │ └── STM32F1xx_HAL_Driver/ # HAL层API实现 ├── Inc/ # 用户定义的全局变量声明和其他公共头部文件 └── Src/ # C语言源代码模块 ``` #### 导入至Keil5 一旦上述过程结束,返回到STM32CubeMX窗口中找到`Open Project`链接,单击它即可直接加载刚刚产生的MDK-ARM工程项目到Keil5环境中去进一步编辑和完善业务逻辑部分。 #### 编写应用程序 在Keil5里继续完善项目的具体功能细节,编写主函数以及其他辅助子程序。例如,如果要实现简单的LED闪烁效果,则可在main.c文件内部加入如下所示的时间延迟循环语句[^4]: ```c while (1) { /* Toggle the LED */ HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); /* Insert delay 1 second */ HAL_Delay(1000); } ``` #### 构建与烧录固件 最后,在确认无误的情况下执行Build操作以验证语法正确性和依赖关系解析情况;随后利用ST-LINK工具将最终版本的二进制映像下载到实际设备当中运行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值