完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include "STM32f10x.h"
void RCC_Init(void) //GPIO时钟初始化 { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD,ENABLE); } void Led_Init(void) //LED相关的GPIO初始化 { GPIO_InitTypeDef GPIO_InitStruct; GPIO_DeInit(GPIOA); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init(GPIOA,&GPIO_InitStruct); //PA_8引脚 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_Init(GPIOD,&GPIO_InitStruct); //PD_2引脚初始化 } void Key_Init(void) //按键初始化 { GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 ; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //13上拉 GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; //15上拉 GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD; //下拉 GPIO_Init(GPIOA,&GPIO_InitStruct); } void Delay_ms(uint32_t nms) { uint32_t i; for(;nms>0;--nms) for(i=12000;i>0;--i) ; } uint8_t KeyScan(void) { GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); //关SW if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13) == 0X00 || GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == 0X00 || GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0X01) { Delay_ms(1); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0X01) //wk_up按键判断 { GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); //开SW return 1; } else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == 0X00) //KEY1按键判断 { GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); return 2; } else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13) == 0X00) //KEY0按键判断 { GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); return 3; } } else GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); return 0; //无按键按下 } int main(void) { uint8_t temp; /* Setup STM32 system (clock, PLL and Flash configuration) */ SystemInit(); RCC_Init(); //外设时钟初始化 Led_Init(); //LED初始化 Key_Init(); // 按键初始化 while (1) { temp = KeyScan(); //判断是否有按键 if(temp) { switch(temp) { case 1: //WK_UP被按下 GPIO_ResetBits(GPIOA,GPIO_Pin_8); //红灯亮 GPIO_ResetBits(GPIOD,GPIO_Pin_2); //绿灯亮 break; case 2: //KEY1按下 GPIO_SetBits(GPIOA,GPIO_Pin_8); //红灯灭 break; case 3: //KEY0按下 GPIO_SetBits(GPIOD,GPIO_Pin_2); //绿灯灭 break; } } } } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval : None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %drn", file, line) */ /* Infinite loop */ while (1) { } } #endif 上面是我的代码 |
|
相关推荐
4个回答
|
|
问题是当我没有按下按键时,它老是自动判断为KEY0按下,所以绿灯总是灭的。为什么呢?
|
|
|
|
自己顶个
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1649 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1566 浏览 1 评论
994 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
694 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1613 浏览 2 评论
1872浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
660浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
528浏览 3评论
544浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
517浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 09:18 , Processed in 0.841783 second(s), Total 87, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号