历史上的今天
返回首页

历史上的今天

今天是:2025年06月24日(星期二)

正在发生

2019年06月24日 | STM32开发系列之寄存器(一)按键控制LED灯

2019-06-24 来源:eefocus

入门学习STM32开发,首先要选择一种开发方式。STM32的开发方式主要有标准库开发、寄存器开发和HAL库开发(这个我没使用过,不太了解)。比较多的人选择的开发方式是库开发,使用这两种方式比较方便,但因经过函数封装,对底层的理解不足。由于我入门也是由标准库开发入门的,所以这里想专门写一下寄存器开发,边写边学习,欢迎一起探讨。


1、一般写法

注:采用的STM32F103ZET6芯片

ST官方提供了stm32f10x.h的头文件,里面有各个寄存器的地址定义,因此可以直接操作寄存器来对IO口进行配置,下面就以案件控制LED灯为例。

在stm32f10x.h头文件里有以下的IO口的宏定义及结构体

在这里插入图片描述在这里插入图片描述


①假设LED灯接在GPIOB5引脚,根据手册我们要先开启GPIOB的时钟

RCC->APB2ENR |= 1<<3;

在这里插入图片描述

从手册中我们可以知道GPIOB位于APB2寄存器的第四位,且为了不改变其他位的值,进行了或运算,将第四位置1,其他位不变。

②接下来要配置端口,STM32有两个端口端口配置寄存器 CRL和CRH,CRL配置低八位,CRH配置高八位。我们要配置的是GPIOB的第6位-GPIOB5,配置为推挽输出,最大速度为50MHZ。


GPIOB->CRL &= 0XFF0FFFFF;   //将GPIOB5置0

GPIOB->CRL |= 0X00300000;   //推挽输出,最大速度50MHZ


在这里插入图片描述

CRL寄存器有32位,每4位控制一个口,这便对应上面所说的CRL控制GPIO的低八位,CRH同样道理。

③最后我们要让GPIOB5输出高低电平,就需要用到另外一个寄存器-输出寄存器ODR,使用这个寄存器时,跟配置APB2寄存器一样,为了不影响其他位,进行或运算


GPIOB->ODR |= 1<<5;    //GPIOB5输出高电平

//GPIOB->ODR |= ~(1<<5);//GPIOB5输出低电平


到这里,我们已经配置好LED灯,接下来我们来配置按键。按键和LED 灯的区别在于LED灯为输出,按键为输入。

④假设按键接在GPIOE4,我们按照上面配置LED灯的顺序来配置按键,先开启GPIOE的时钟,然后配置GPIOE4为上拉输入模式


 RCC->APB2ENR |= 1<<6

 GPIOE->CRL   &= 0xFFF0FFFF;

 GPIOE->CRL   |= 0x00080000;    //上拉输入

 GPIOE->ODR   |= 1<<4;


配置好后,我们要如何才能读取按键按下时的值呢(0或1)?STM32不能像51单片机那样直接P1.0 = 0;这样写,我们需要通过IDR输入寄存器读取整个GPIOE,然后老套路进行与运算和移位来得到我们想要那位的值。


//  #define  KEY0_Read   (GPIOE->IDR&0x01)     

//  #define  KEY1_Read   (GPIOE->IDR&0x02)>>1 

//  #define  KEY2_Read   (GPIOE->IDR&0x04)>>2  

//  #define  KEY3_Read   (GPIOE->IDR&0x08)>>3 

#define  KEY4_Read   (GPIOE->IDR&0x10)>>4   


其他位的读取方法也类似,之后我们就可以在if里面进行判断,控制LED灯的亮灭了。


if(KEY4_Read == 0)              //读取PE4的电平

 {

  LED0_RESET();

 }

 else{

  LED0_SET();

 }



推荐阅读

史海拾趣

Component Research Co公司的发展小趣事

Component Research Co最初只是一家小型电子元件研发公司,面临着激烈的市场竞争。然而,公司研发团队在一次实验中意外发现了一种新型半导体材料,这种材料具有出色的导电性能和稳定性。公司迅速将这一发现转化为实际产品,并推向市场。新产品因其卓越性能迅速受到客户青睐,Component Research Co因此名声大噪,逐渐在电子元件市场占据一席之地。

Comax Industrial Co Ltd公司的发展小趣事

随着公司的不断发展壮大,Comax Industrial Co Ltd公司开始积极拓展市场。公司不仅在国内市场取得了显著的成绩,还积极进军国际市场,与多个国家和地区的客户建立了稳定的合作关系。通过参加国际展会、建立海外分支机构等方式,公司的业务范围逐渐扩大,市场份额也持续提升。这种市场拓展的策略,使得Comax实现了跨越式的发展。

Bel Power Solutions公司的发展小趣事

在国内市场取得一定成绩后,Bel Power Solutions开始积极拓展国际市场。公司通过与全球知名企业的合作,成功将产品打入国际市场,并赢得了良好的声誉。同时,公司还积极寻求与系统集成商、分销商等建立长期稳定的合作关系,共同开拓市场。这些合作伙伴关系的建立,不仅为公司带来了更多的商业机会,还提升了公司的品牌影响力和市场份额。

Global Components & Controls公司的发展小趣事
将挡住光线的纸拿开,观察灯光亮度的变化。如果灯光稍有变化但趋于稳定,说明RP2的调节已到位;如果亮度变化很大,则需要进一步调节RP2使灯光稍有下降直至稳定。
Abbotec Incorporated公司的发展小趣事

Abbotec Incorporated公司自成立以来,一直致力于电子技术的研发与创新。在某一年,公司研发团队成功开发出一款具有划时代意义的芯片,这款芯片在性能上大幅提升,同时降低了能耗。这一技术突破迅速引起了业界的关注,Abbotec因此获得了大量的订单,公司规模迅速扩大。

Eurotechnique公司的发展小趣事

近年来,随着数字化和智能化的快速发展,Eurotechnique也加快了数字化转型和智能化升级的步伐。公司投入大量资金和资源,引进先进的数字化生产线和智能化设备,提高生产效率和产品质量。同时,Eurotechnique还加强了与互联网、大数据等新技术领域的合作,推动公司的数字化转型和智能化升级。这些努力使得Eurotechnique在竞争激烈的电子行业中保持了领先地位。

问答坊 | AI 解惑

测量仪器的分类及应用

1.示波器   示波器是一种测量电压波形的电子仪器,它可以把被测电压信号随时间变化的规律,用图形显示出来。使用示波器不仅可以直观而形象地观察被测物理量的变化全貌,而且可以通过它显示的波形,测量电压和电流,进行频率和相位的比较,以及描绘特 ...…

查看全部问答>

询问电流传感器

大概是测10A左右的电流传感器  工作电压12V 有什麽推荐的…

查看全部问答>

选用组合逻辑还是时序逻辑?

组合逻辑的输出仅与当前的输入有关; 而时序逻辑的输出不但与输入有关,还和系统上一个状态有关。 这个话很清楚,可是具体是有些迷糊: 请达人分析下这个:PC=Int_Sev?Int_Sev_addr:{PC[31:5]+1\'b1,PC[4:0]},这个应该是组合逻辑呢?还是时序逻 ...…

查看全部问答>

请教在CEPC虚拟机上录音失效的问题

1.录音程序是参考微软官方网站的代码修改的 2.在虚机上第一次录音成功,但是第二次录音却失败了 3.在第一次录音结束,调用waveInReset方法的时候,声音消失 请教大家有遇到这样的问题吗,我使用的是Visual PC 如果有,请问用什么方法能避免这样 ...…

查看全部问答>

调试 wince6.0 multi-bin 遇到的问题

最近在弄 wince6.0的multi-bin遇到了一些问题,想请教一下: 在BSP中我的config.bib是这样设置的: MEMORY         XIPKERNEL        80200000  002FF000  RAMIMAGE   &nbs ...…

查看全部问答>

EVB打包程序,急需~~

谁有EVB的打包程序啊,我下的EVB没有打包程序,编译出来的.VB程序无法在WIN CE上运行,谁能帮我做个打包程序嘛? 程序中要用到WIN CE file控件,MS CE comm控件,image控件,急需~~…

查看全部问答>

各位老兄,一起收集较好的嵌入式论坛(ARM,DSP,FPGA,单片机都行)

我先来 eeworld 硬件嵌入式板块,自是不用说了,俺就是在这里成长的。 www.armce.com/bbs——这个专门wince的,我感觉也不错,里面收藏了很多原创和非原创工具 驱动开发网wince板块,以前很火,不知道为啥现在堕落了。 www.2@1i ...…

查看全部问答>

高性能交流伺服的指标?

一个高性能的交流伺服可以用哪些指标来衡量?比如调速范围,稳速精度,响应频率等再有就是这些指标具体多大(大概的一个数值)才算是高性能? 比如调速范围:满载条件下,不低于5000:1,不要动辄相信谁的伺服都能达到10000:1; 稳速精度:满载 ...…

查看全部问答>

FPGA流水灯

用FPGA跑流水灯的程序,也许对你有用!…

查看全部问答>

.tcf格式的文件作用是什么?

刚接触CCS,创建一个工程的时候里面的.tcf格式的文件作用是什么啊?知道的给简单说说吧…

查看全部问答>