一 在产品手册中找到key 和LEd的原理图
key 原理图
led 原理图
二 在底层文件夹中的Src和Inc中bsp中创建bsp_led_key.c和 bsp_led_key.h
三 在scourse中打开cobmex并通过与原理图配置引脚
key引脚(按键配置为input,其他选项默认 PA0 PB0-2)
led引脚(led配置为output,在gpio设置中要将默认电平改为高电平,其它不变。注意:不能忽略PD2,默认为低电平,高电平有效 PD2 PC8-15)
1.芯片设置
2.GPIO设置(shift 多选后,高电平,推挽输出以及NO Pull-up and No Pull-down)
四 打开test中MDK项目添加文件(注意.h路径是否需要添加)完成后进行以下操作
1.在bsp_led_key.c和main.c中分别添加led_key/bsp_led_key.h后编译
2.编译成功后在bsp_led_key.h中导入main.h
3.将scourse中gpio.c 中生成的初始化函数复制到test的bsp_led_key.c中
五 写入其他模块函数
1.led显示函数,想让某一位灯亮就让其为1(在初始化后应该令所有灯都熄灭)
led显示函数
C复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void LED_Disp(uint8_t ucLed)
{
// 对所有位置1,使led灯熄灭 (这一部分应该复制到初始化函数之后,让灯一开始就熄灭)
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); // 让PD置1,使数据进入
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);// 让PD置0,关闭
HAL_GPIO_WritePin(GPIOC, ucLed<<8, GPIO_PIN_RESET); //左移8位后令数据进入对应引脚
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
2.按键扫描函数
按键扫描函数
C复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uint8_t Key_Scan(void)
{
uint8_t unKeyval = 0;
if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0 )==GPIO_PIN_RESET)
//如果读GPIOB,PIN_0 的值 等于GPIO_PIN_RESET,代表值为 0 ,此时说明按键按下,返回具体数值
unKeyval = 1;
if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1 )==GPIO_PIN_RESET)
unKeyval = 2;
if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2 )==GPIO_PIN_RESET)
unKeyval = 2;
if (HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0 )==GPIO_PIN_RESET)
unKeyval = 2;
return unKeyval;
}
六 写入模块子函数后,记得要在.h文件中做对应声明
七 在main.c中调用led_key模块进行初始化
八 定义变量已经对子函数进行声名
九 在while循环中调用子函数
十 写key按键子函数
十一 写入led扫描函数