银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V0.1 | 2020-11-18 | gingko | 初次建立 |
1.在主界面选择File–>New Project或者直接点击ACCEE TO MCU SELECTOR新建工程 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片,本实验选取的芯片型号为:STM32F429IGHx 3.配置RCC,使用外部时钟源,HSE选择“Crystal/Ceramic Resonator” 4.配置调试引脚 5.将三色LED对应的三个引脚(PI3、PI4、PH14)设置为GPIO_Output 6.LED引脚模式配置 7.将 ARM_KEY 对应的引脚(PG9)设置为 GPIO_Input,并对其进行配置 8.时钟源设置,选择外部高速时钟源,配置为最大主频 9. 工程文件的设置, 这里就是工程的各种配置。我们只用到有限的几个,其他的默认即可。 IDE我们使用的是 MDK V5.27 10.点击Code Generator,进行进一步配置
自行选择方式即可
1.按键简介
2.按键消抖
int main(void) { HAL_Init(); //重置所有外围设备,初始化Flash接口和Systick SystemClock_Config(); //配置系统时钟 MX_GPIO_Init(); //初始化所有已配置的外围设备 LED_RED_ON; //初始化LED状态为红灯点亮 while (1) //按键按一次切换一次LED状态 { /* 按键扫描函数在stm32f4xx_it.c文件中调用,每20ms扫描一次按键状态 */ /* 按键处理函数,每按下一次,LED状态改变一次 */ key.process(); } }
static void process(void) { static int cnt = 0; if(key.value != key.bak_value){ //按键处理 switch(key.value){ case ARM_KEY: if(cnt % 3 == 0){ LED_RED_OFF; LED_BLUE_ON; LED_GREEN_OFF; }else if(cnt % 3 == 1){ LED_RED_OFF; LED_BLUE_OFF; LED_GREEN_ON; }else if(cnt % 3 == 2){ LED_RED_ON; LED_BLUE_OFF; LED_GREEN_OFF; } cnt ++; if(cnt > 2) cnt = 0; break; } key.bak_value = key.value; } }
static unsigned char read(void) { static unsigned char key_state = 0; static unsigned int key_value; static unsigned char key_return = 0; switch(key_state){ case 0: //按键被按下 if(!(ARM_KEY_VALUE)){ key_state ++; key_value = ARM_KEY_VALUE; } break; case 1: //消抖处理 if(key_value != ARM_KEY_VALUE){ key_state --; }else{ switch(key_value){ case 0x00: key_return = ARM_KEY; break; } key_state ++; } break; case 2: //按键释放 if(ARM_KEY_VALUE == 0x01){ key_state = 0; key_return = KEY_NONE; } break; } return key_return; }
void SysTick_Handler(void) { static int counter = 0; unsigned char temp; HAL_IncTick(); if(counter++ % 20 == 0){ //设置定时时间为20ms if(key.bak_value == key.value){ temp = key.read(); if(temp != 0){ key.value = temp; } } } }