stm32笔记:按键输入(精简版)

发布者:浅唱清风最新更新时间:2017-02-19 来源: eefocus关键字:stm32  按键输入 手机看文章 扫描二维码
随时随地手机看文章

C代码  收藏代码

  1. //GPIOA8是   LED0  

  2. //GPIOA13是  KEY0            仅包含启动代码 STM32F10x.s  

  3.   

  4. #define GPIOA_CRL    (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x00))  

  5. #define GPIOA_CRH    (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x04))  

  6. #define GPIOA_IDR    (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x08))  

  7. #define GPIOA_ODR    (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x0C))  

  8. #define RCC_APB2ENR  (*(volatile unsigned long *)(0x40000000+0x20000+0x1000+0x18))  

  9.   

  10. void delay(unsigned long i)   //超级不精确的软延时  

  11. {  

  12.     int j;  

  13.     while(i--)  

  14.     {  

  15.         for(j=0;j<1500;j++)  

  16.         {}            

  17.     }     

  18. }  

  19.       

  20. int main(void)  

  21. {     

  22.     u8 keyflag=1;   //按键进入标志,防止一次按键多次判断的简易做法  

  23.       

  24.     RCC_APB2ENR= 1<<2;         //打开PA时钟,默认启用内部8M时钟  

  25.     GPIOA_CRH &= 0XFFFFFFF0; //准备配置PA8 ,PA8是LED0  

  26.     GPIOA_CRH |= 0X00000003; //PA8 推挽输出        

  27.     GPIOA_ODR |= 1<<8;       //PA8 输出高,即先关闭led  

  28.   

  29.     GPIOA_CRH &= 0XFF0FFFFF;  //准备配置PA13    ,PA13是KEY0    

  30.     GPIOA_CRH |= 0X00800000;  //配置PA13为带上拉下拉输入  

  31.       

  32.       

  33.     while(1)  

  34.     {   

  35.         if(!checkBit(GPIOA_IDR,13))  //键被按下的话,执行led反转  

  36.         {  

  37.             if(keyflag)  

  38.             {  

  39.                 keyflag=0;  

  40.                 GPIOA_ODR = revBit(GPIOA_ODR,8); //第8位反转,revBit是宏  

  41.             }  

  42.         }  

  43.         else  

  44.         {  

  45.             keyflag=1;  

  46.         }  

  47.           

  48.         delay(10); //简易消抖  

  49.     }      

  50. }  

  51.   

  52.   

  53. //checkBit 和revBit都是关于位的宏  

  54. //#define  BIT(n)            (1<<(n))  

  55. //#define  revBit(val,n)     ((val)^(BIT(n)))  

  56. //#define  checkBit(val,n)   (((val)&(BIT(n)))>>(n))  

 


关键字:stm32  按键输入 引用地址:stm32笔记:按键输入(精简版)

上一篇:stm32笔记:解决mdk编辑代码时的各种乱码问题
下一篇:stm32笔记: 将用户自定义关键字从MDK3.8 搬到 MDK4.70A

推荐阅读最新更新时间:2024-03-16 15:33

STM32-Keil软件仿真和硬件仿真/在线仿真
软件仿真和硬件仿真什么区别?软件仿真就是没有硬件参与的仿真,完全是模拟实现的。硬件仿真是将程序下载到控制芯片的FLASH或RAM中,直接在硬件上实现仿真。【有什么问题欢迎联系讨论,一起解决问题】 仿真这种东西,因为涉及到信任问题,用的好觉得好用,用不好可能会徒增麻烦——“还不如直接在硬件上调试靠谱”。但是总体上,仿真还是比较有用的,比如在排查软件问题(寄存器配置等)的时候,使用软件仿真是非常靠谱的。而如果涉及到硬件的问题(比如你的板子代码需要读取外部信号,或者输出信号等),可能需要用到硬件仿真,或者说在线仿真。关于仿真,网上的资料说的还是挺全的,这里只做总结。 一、软件仿真 1.1 仿真配置 首先确定仿真的硬件环境。点击魔
[单片机]
STM32-Keil软件仿真和硬件仿真/在线仿真
STM32 UART串口通讯编程方法
在对通讯时间要求比较高的时候,就需要自己对UART的通讯底层直接进行操作。我以STM32单片机为例,讲一下比较快速的UART编程方法。——其实不止是STM32这么处理,我以前使用过51的单片机,TI的MSP单片机,三菱的16位单片机,都可以采用这种方法。 基本的处理思路如下: 1. UART接收的处理方法 打开UART的接收中断,每收到一个字节就放到接收缓冲区,同时更新接收指针。当连续100ms没有收到接收字符,则认为本次帧接收完毕,置位帧接收完成标志,由主程序进行处理。 2. UART发送的处理方法 将需要发送的数据放到发送缓冲区,设置发送长度。然后发送第一个字节,并打开发送中断。在发送中断中判断是否已经发送
[单片机]
意法半导体推出业界首创的云端MCU边缘人工智能开发者平台
意法半导体推出业界首创的云端MCU边缘人工智能开发者平台 可在STM32板上在线评估边缘 AI模型性能 2023年2月23日,中国 – 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;)继续扩大嵌入人工智能(AI)解决方案组合,为嵌入式人工智能开发人员和数据专家提供一套业界首创的在线开发工具和服务。 STM32Cube.AI云端开发者平台让开发者有机会使用一整套围绕行业领先的 STM32微控制器 (MCU)构建的在线开发工具,促进软硬件选购决策,降低边缘人工智能技术开发复杂度,加快新产品上市速度。 意法半导体通用微控制器子产品部执行副总裁Ricardo De
[网络通信]
意法半导体推出业界首创的云端MCU边缘人工智能开发者平台
STM32 DAC详解
上一篇介绍了《 STM32ADC详解 》,既然有模拟转数字的ADC模块,那么就必然有数字转模拟的DAC模块。顾名思义,该模块仅具有ADC的补充功能。它将数字二进制值转换为模拟电压输出。DAC模块具有多种用途,包括音频生成,波形生成等。通常在大多数8位微控制器中,此模块不可用,并且通过脉宽调制(PWM)可以稍微满足其需求。部分原因是由于它们的硬件资源和运行速度相对较低。所有STM32单片机都具有PWM模块,但大容量STM32也具有DAC模块。STM32DAC模块不是很复杂,并且在工作原理方面与ADC模块相似。 01、DAC简介 从STM32F207数据手册看到,STM32F207具有两个DAC模块。 每个DAC具有独立的通道
[单片机]
<font color='red'>STM32</font> DAC详解
STM32串口通讯USART
三种方式:查询,中断,DMA 通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。 它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的DMA方式,可以实现高速数据通信。 主要特性: 全双工的,异步通信 NR 标准格式 分数波特率发生器系统 -发送和接收共用的可编程波特率,最高到4.5Mbits/s 可编程数据字长度(8位或9位) 可配置的停
[单片机]
STM32 GPIO的外部中断设计
一、前言 在之前针对 STM32 的G PI O相关API函数及配置使用进行了详细的介绍,GPIO作为输入引脚时,调用相关读 信号 引脚函数接口就可以在程序的循环中,轮询的对输入信号进行读取 检测 操作,除了轮询的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EX TI 的结构,接着介绍外部中断的相关概念, 对STM32的IO外部中断EXTI有个初步的了解,在此基础上重点围绕IO外部中断EXTI的使用展开分析。 图1 外部中断设计 二、EXTI结构 EXTI(Ex te rnal interrupt/event controller)—外部中断/事件控制器,管理了控制器的
[单片机]
<font color='red'>STM32</font> GPIO的外部中断设计
基于STM32单片机的串口使用解析
STM32串口功能比较强大,但仅仅使用串口来说,是很简单的 我们要做的事 1.使能串口时钟 2.复位串口 3.设置串口波特率 4.设置数据长度,停止位 5.收发使能 6.串口使能 1 int main() 2 { 3 u8 buf; 4 sysclk_init(9); 5 6 RCC-》APB2ENR|=1《《14; //串口使能 7 8 RCC-》APB2RSTR|=1《《14; 9 RCC-》APB2RSTR&=~(1《《14);//复位串口,不复位会出错 10 USART1-》BRR=0x1D4C;//设置波特率 11 USART1-》CR1|=0x200c;//停止位在USART-》CR2中,默认为1位停止位 12 /
[单片机]
基于<font color='red'>STM32</font>单片机的串口使用解析
STM32 TIM1 PWM 输出
GPIO_InitTypeDef GPIO_InitStructure2; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //第一步:配置时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_TIM1,ENABLE); //第二步,配置goio口
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved