5309|2

2781

帖子

417

TA的资源

五彩晶圆(中级)

楼主
 

【晒心得】STM32F03开发板--按键操作(库函数) [复制链接]

【晒心得】STM32F03开发板--按键操作(库函数)
昨天用配置寄存器的方法来点亮LED灯,感觉还是有点麻烦。既然官方提供了固件库,那就好好利用吧!接下来我试验按键控制点亮LED
上面是B1按键的原理图,从图中可以看出按键接到了端口PA0。学过51单片机的学过怎么来操作按键输入,按键控制分为两种情况:一种为按键扫描,这种方式CPU会不停地工作,一直在查询GPIO口的状态,是高电平还是低电平。另外一种是中断控制,这种方式CPU占用低,效率高,CPU可以处理其他事情。
按键扫描程序:
  1. #include "stm32f0xx.h"
  2. #include "stm32f0xx_rcc.h"
  3. #include "stm32f0xx_gpio.h"

  4. GPIO_InitTypeDef GPIO_InitStructure;
  5. /*KEY按键端口PA0配置*/
  6. void KEY_Init()
  7. {
  8. /* 使能PA0时钟 */
  9. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  10. /* 配置 PA0 */
  11. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  12. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; /*!< GPIO Input Mode  */
  13. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  14. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
  15. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  16. GPIO_Init(GPIOA, &GPIO_InitStructure);
  17. }
  18. /*LED按键端口PC9配置*/
  19. void LED_Init()
  20. {
  21. /* 使能PC9时钟 */
  22. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
  23. /* 配置 PC9 */
  24. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
  25. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; /*!< GPIO Input Mode  */
  26. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  27. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
  28. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  29. GPIO_Init(GPIOC, &GPIO_InitStructure);
  30. }
  31. /*延时函数*/
  32. void Delay(uint32_t temp)
  33. {
  34. for(; temp!= 0; temp--);
  35. }
  36. /*按键扫描函数*/
  37. uint8_t KEY_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
  38. {
  39. if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0 ) //检测是否有按键按下
  40. {
  41. Delay(10000); //延时消抖
  42. if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0 )//检测是否有按键按下
  43. {
  44. while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0); //等待按键释放
  45. return 0 ;
  46. }
  47. else
  48. return 1;
  49. }
  50. else
  51. return 1;
  52. }
  53. int main(void)
  54. {
  55. KEY_Init();//按键初始化
  56. LED_Init();//led 初始化
  57.     while(1)
  58.     {
  59.             if(KEY_Scan(GPIOA, GPIO_Pin_0) == 0)//判断按键是否按下
  60.             {
  61.              //GPIO_SetBits(GPIOC, GPIO_Pin_9);
  62.              GPIO_WriteBit(GPIOC, GPIO_Pin_9,
  63.              (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_9))));//反转 led 灯
  64.             }
  65.             else
  66.             {
  67.              GPIO_SetBits(GPIOC, GPIO_Pin_8);

  68.             }
  69.     }
  70. }
复制代码
此帖出自stm32/stm8论坛

最新回复

学习了,谢谢  详情 回复 发表于 2013-11-18 12:52
点赞 关注
个人签名
 

回复
举报

2781

帖子

417

TA的资源

五彩晶圆(中级)

沙发
 
  1. #include "stm32f0xx.h"
  2. #include "stm32f0xx_rcc.h"
  3. #include "stm32f0xx_gpio.h"
  4. #include "stm32f0xx_exti.h"
  5. #include "stm32f0xx_misc.h"
  6. #include "stm32f0xx_syscfg.h"
  7. #include "stm32f0xx_it.h"
  8. GPIO_InitTypeDef GPIO_InitStructure;


  9. /*NVIC初始化*/
  10. void NVIC_Config(void)
  11. {
  12.         NVIC_InitTypeDef NVIC_InitStructure;
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  14.         NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
  15.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  16.         NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
  17.         NVIC_Init(&NVIC_InitStructure);
  18. }
  19. /*EXTI初始化*/
  20. void EXTI_Config(void)
  21. {
  22.         EXTI_InitTypeDef EXTI_InitStructure;
  23.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  24.         /* 外部中断配置 */
  25.         SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//配置外部中断源
  26.         EXTI_InitStructure.EXTI_Line = EXTI_Line0;//外部中断线程
  27.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  28.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//外部中断模式
  29.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿中断
  30.         EXTI_Init(&EXTI_InitStructure);

  31. }
  32. /*KEY按键端口PA0配置*/
  33. void KEY_Init(void)
  34. {
  35.         /* 使能PA0时钟 */
  36.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  37.         /* 配置 PA0 */
  38.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  39.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; /*!< GPIO Input Mode  */
  40.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  41.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
  42.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  43.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  44. }
  45. /*LED按键端口PC9配置*/
  46. void LED_Init(void)
  47. {
  48.         /* 使能PC9时钟 */
  49.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
  50.         /* 配置 PC9 */
  51.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
  52.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; /*!< GPIO Input Mode  */
  53.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  54.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
  55.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  56.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  57. }
  58. int main(void)
  59. {
  60.         KEY_Init();
  61.         LED_Init();
  62.         NVIC_Config();
  63.         EXTI_Config();
  64.     while(1)
  65.     {
  66.     }
  67. }
复制代码
STM32F03-KEY.zip (118.54 KB, 下载次数: 27)
STM32F03-EXTI0.zip (148.64 KB, 下载次数: 23)
【晒心得】STM32F03开发板--按键操作.pdf (182.18 KB, 下载次数: 24)



[ 本帖最后由 qinkaiabc 于 2013-11-18 02:12 编辑 ]
此帖出自stm32/stm8论坛
 
个人签名
 

回复

179

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
学习了,谢谢
此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表