历史上的今天
返回首页

历史上的今天

今天是:2025年06月21日(星期六)

2019年06月21日 | stm32之按键实验

2019-06-21 来源:eefocus

前言:这个实验比较简单,就是对io口的配置。


实验现象

up键用来打开led灯,down键用于关闭led灯,left键用于打开蜂鸣器,right用于关闭蜂鸣器。


操作步骤

1.初始化用到的io口


void key_init()

{


            GPIO_InitTypeDef GPIO_InitStructure;


            RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//打开io口的时钟

            RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);//打开io口的时钟


            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;//上键,模式为输入模式

            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//设定管脚

            GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;

            GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;­//下啦模式

            GPIO_Init(GPIOA,&GPIO_InitStructure);



            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;//RIGHT、down、left KEY

            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;

            GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;

            GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上啦模式

            GPIO_Init(GPIOE,&GPIO_InitStructure);


}



注意:这里按键的io口为输入功能,所以模式为输入模式。另外上啦和下拉根据电路图而定。还有,因为为输入模式,所以之前有一个输出模式选择(推挽输出)就没有了。


2.按键的检测


void key_scan()

{

        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)//这个函数用于读取管脚的电平

        {

            delay_ms(10);//消抖

          if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)//再次判断

            {

                while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));//看是否按键抬起来了

                GPIO_ResetBits(GPIOF,GPIO_Pin_10);//open the led

            }

        }




    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)

        {

            delay_ms(10);

          if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)

            {

                while(!(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)));

                GPIO_SetBits(GPIOF,GPIO_Pin_10);//turn off the led

            }

        }




        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)//open beep

        {

            delay_ms(10);

          if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)

            {

                while(!(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)));

                GPIO_ResetBits(GPIOF,GPIO_Pin_8);

            }

        }




        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)//close beep

        {

            delay_ms(10);

          if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)

            {

                while(!(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)));

                GPIO_SetBits(GPIOF,GPIO_Pin_8);

            }

        }


}



说明:在这里的程序我没有按照教程里的程序里来写,而是根据自己的理解方式来写的。我这里将按键的检测和相应的操作写在了一起。如果你觉得麻烦,你也可以另写一个操作函数。


注意:这里的消抖程序一定要记住


主函数:


int main()

{

    RCC_HSE_Config(8,336,2,7);//设置系统时钟。注意这个函数要自己写放在主函数前。

    Beep_Init();//蜂鸣器初始化

    SysTick_Init(168);//设置systick的时钟源

    key_init();

    LED_Init();


    while(1)

    {

        key_scan();//不停的去检测按键的状态

    }


}


补充:这个实验的原理是不断去检测按键的状态,而如果用中断就会很方便,让系统自己去检测按键的状态


推荐阅读

史海拾趣

Clulite公司的发展小趣事
  1. 创业初期
    • 描述Clulite公司的创始人或核心团队如何识别电子行业中的某个市场机遇。
    • 讲述他们是如何筹集初始资金,设立公司,并开发出第一款产品或解决方案的。
    • 可以提及公司在初创阶段面临的挑战,如技术难题、市场竞争等。
  2. 技术创新
    • 讲述Clulite如何通过研发创新,推出了一款颠覆性的产品或技术,从而获得了市场认可。
    • 详细描述这一创新过程,包括研发团队的努力、关键技术的突破等。
    • 提及这一创新如何帮助公司在市场上取得了竞争优势。
  3. 市场拓展
    • 描述Clulite如何逐步扩大市场份额,从地区市场走向全国乃至国际市场。
    • 可以讲述公司如何建立销售网络、与合作伙伴建立合作关系,以及参与行业展会等活动来推广品牌和产品。
    • 提及公司在市场拓展过程中遇到的挑战和应对策略。
  4. 品质管理
    • 讲述Clulite如何注重产品质量和客户体验,通过严格的质量控制流程来提升产品可靠性。
    • 描述公司如何建立完善的售后服务体系,为客户提供及时、专业的支持。
    • 提及这些举措如何帮助公司赢得了客户的信任和口碑。
  5. 可持续发展
    • 讲述Clulite如何关注环境保护和社会责任,推动公司的可持续发展。
    • 描述公司如何采取环保措施,减少生产过程中的污染排放。
    • 提及公司如何参与社会公益事业,回馈社会。

请注意,这些故事需要根据Clulite公司的实际情况进行调整和补充。如果你需要更具体的内容,建议查阅Clulite公司的官方网站、新闻报道或行业分析报告,以获取更详细的信息和数据。

AVAGO公司的发展小趣事

随着公司规模的扩大和技术的不断积累,AVAGO公司开始寻求多元化的发展道路。除了继续深耕半导体领域外,公司还积极拓展其他相关领域,如传感器、无线通信等。同时,公司还与其他行业的领军企业建立了紧密的战略合作关系,共同推动技术创新和市场拓展。

Dexter Research Center Inc公司的发展小趣事

作为一家有社会责任感的企业,Dexter始终关注环境保护和可持续发展问题。公司积极采用环保材料和工艺,减少生产过程中的废弃物和污染物排放。同时,Dexter还积极参与社会公益事业,为当地社区和弱势群体提供帮助和支持。这些举措不仅有助于保护环境、推动社会进步,还提升了Dexter的企业形象和品牌价值。

Alpha Industries公司的发展小趣事

随着互联网技术的普及,电子商务成为了越来越多消费者的首选购物方式。Alpha Industries抓住这一机遇,积极拓展电子商务平台。公司在各大电商平台上开设官方旗舰店,并通过社交媒体进行品牌推广。此外,Alpha Industries还开发了自己的官方网站和移动应用,为消费者提供更加便捷的购物体验。电子商务平台的拓展使得Alpha Industries的产品能够更好地触达消费者,进一步提升了品牌知名度和市场占有率。

High Tech Chips Inc公司的发展小趣事

随着互联网技术的普及,电子商务成为了越来越多消费者的首选购物方式。Alpha Industries抓住这一机遇,积极拓展电子商务平台。公司在各大电商平台上开设官方旗舰店,并通过社交媒体进行品牌推广。此外,Alpha Industries还开发了自己的官方网站和移动应用,为消费者提供更加便捷的购物体验。电子商务平台的拓展使得Alpha Industries的产品能够更好地触达消费者,进一步提升了品牌知名度和市场占有率。

Hpc Technology Inc公司的发展小趣事

在环保意识日益增强的今天,Alpha Industries积极响应绿色生产的号召。公司利用电子技术优化生产流程,减少能源消耗和废弃物排放。此外,Alpha Industries还推出了采用环保材料制成的军事服装系列,以实际行动践行绿色环保理念。这些举措不仅有助于提升公司的社会形象,也为公司的可持续发展奠定了坚实基础。

这些故事展示了Alpha Industries如何在电子技术的推动下,不断创新并适应市场变化,进而在相关领域取得显著发展。尽管这些故事并未直接涉及电子行业的核心业务,但它们却充分体现了Alpha Industries在技术创新和市场拓展方面的积极努力和取得的成果。

问答坊 | AI 解惑

【新技术介绍】基于模型的自动代码生成

其实,现在无论TI也好、Xilinx、Altera、微星,ADI、飞思卡尔等世界级大公司都将自己生产的设备用inlined wraper s-function或代码继承工具写成了一个个的simulink模块,还有一些经过实践验证的常用算法MathWorks也用这些工具把他们变成了算法模型 ...…

查看全部问答>

Wince5.0 上菜单 build project和build OS的区别

菜单build project和build OS下都有build,sysgen,make image,两个菜单下的功能有什么区别啊…

查看全部问答>

请教win7下WM设备中心与WinCE5仿真器或设备无法连接的问题

windows mobile设备中心的状态始终是未连接,并且无论通过仿真器还是通过USB连真机都这样。 难道是WIN7太高级了,不愿认wince5的东西了? 请教应用如何配置?…

查看全部问答>

(悭钱十月)活跃一下板块,我给大家说道说道怎么免费搞到开发板!!

不知不觉已经大四很长时间了。回首看看,这四年的成果,除了一个个五花八门的证书外,作为电子人,比别人更多的是攒了四年的元器件和开发板。 今天就给大家说道说道,俺的开发板都是怎么来的。其实每个开发板的背后都有着一段,一见钟情,刻骨铭心 ...…

查看全部问答>

便宜出个人闲置 EasyPRO 80B 编程器

自用机器,因买了周立功的X8故闲置便宜出售,无任何质量问题,专用电源+主机。 支持淘宝交易,有问题您退给我,350RMB,包全世界快递费。 http://item.taobao.com/auction/item_detail.htm?item_num_id=7751583002  …

查看全部问答>

PLC外部完成定时器设定修改的方法

外部完成定时器设定修改的方法 PLC控制系统在使用过程中,经常要修改一些参数,最常见的就是修改定时器的设定值。为了操作员方便修改定时器的设定值,可用下列方法来实现: 1、 使用人机界面 PLC可以用触摸屏、文本显示器或工控机作人机界面,方便 ...…

查看全部问答>

版主请进,关于STM32控制PMSM电机

                                 香主,网上有你们关于开发直流DC电机的PPT资料,好像是三天的,现在在上海附近还有没有关于如何进行DC Mo ...…

查看全部问答>

STM8SI2C从机可发不可接,什么问题?

STM8S105S4 I2C这样配置可以从机发数据,从机接数据就不行,是什么问题 //I2C端口初始化 GPIO_Init(GPIOE,GPIO_PIN_1|GPIO_PIN_2, GPIO_MODE_OUT_OD_HIZ_SLOW); void I2C_init(void) { I2C_CCRH   = 0;    //标 ...…

查看全部问答>

请教“版主老大”定时器定时不准确的问题,谢谢

void TIM2_INIT() {   RCC->APB1ENR |= (1<<0);                         //TIM2EN 定时器2时钟使能   TIM2->PSC |= 63999 ...…

查看全部问答>

怎么在IAR 3.40版本中看build代码大小?

请教一下: 刚刚下载一个3.40的30天试用版,但是看不了build之后的代码大小报告 XXXX BYTE RAM,XXXX byte FLASH..... 另外,我是在安装IAR之前与之后设置了两个系统还原点(XP系统) 如果30天之后,我运行系统还原的话.....???会有什么结果呢?…

查看全部问答>