10月30日 stm32助教准备

寄存器方式点亮LED

RCC->AHB1ENR |= (1<<5);                           //使能GPIO时钟

AHB1ENR为外设时钟使能寄存器

1<<5 即 0010 0000 对应GPIOF的时钟使能,符合实验要求点亮PF0

GPIOF->MODER =0x0000;                     //寄存器复位值

GPIOF->MODER |= (1<<2*0);                       //配置F0引脚为通用输出

MODER为GPIO的模式寄存器用于设置 GPIO 引脚的工作模式,每个 GPIO 引脚对应于模式寄存器的两个控制位,模式寄存器如图所示。

图中,MODERy[1:0]为端口 GPIOx 的配置位(x 为端口号 A~I,y 为引脚号 0~15。例如,引脚 PF7 的端口号为 F,引脚号为 7,需要配置 GPIOF 下的 MODER7 寄存器),这些位通过软件写入,用于配置 GPIO 端口方向模式。

00:输入模式(复位状态)。

01:输出模式。

10:复用功能模式。

11:模拟功能模式。

GPIOF->OTYPER &=~(1<<1*0);             //配置F0推挽输出

OTYPER为输出类型寄存器,用于设置 GPIO 引脚的输出类型,如图所示。

图中,位 16 至位 31 保留,必须保持复位值,OTy 代表端口 x 的配置位(x 为端口号 A~I,y 为引脚号 0~15),这些位通过软件写入,用于配置 GPIO 端口 的输出类型。

0:输出推挽(复位状态)。

1:输出开漏。

GPIOF->OSPEEDR &= ~(1<<2*0);           //配置F0速度2M

其中,OSPEEDR为输出速度寄存器,用于定义输出模式下,GPIO 引脚可输出脉冲的速度,也就 是在不出现错误的情况下,高低电平最高的切换速度,输出速度寄存器如图所示。

图中,OSPEEDRy[1:0]代表端口 x 的配置位(x 为端口号 A~I,y 为引脚号 0~15),这些位通过软件写入,用于配置 GPIO 端口输出速度。

00:2MHz(低速)

01:25MHz(中速)

10:50MHz(快速)

11:100MHz(高速)

GPIOF->PUPDR |= (1<<2*0);              //配置上拉

其中,PUPDR为上拉/下拉寄存器,用于设定 GPIO 引脚在内部是否连接上拉电阻或下拉电阻, 上拉/下拉寄存器如图所示。

图中,PUPDRy[1:0]代表端口x的配置位(x为端口号A~I,y为引脚号0~15), 这些位通过软件写入,用于配置 GPIO 端口的上拉或下拉功能。

00:无上拉或下拉。

01:上拉。

10:下拉。

11:保留。

GPIOF->BSRRH |= (1<<0);                //输出低电平,LED点亮

BSRRH为置位/复位寄存器,置位/复位寄存器是只读寄存并且只有写 1 才能产生控制效果,对低 16 位 (BSRRL)写 1,对应的 GPIO 引脚输出高电平;对高 16 位(BSRRH)写 1,单片机原理与实践 110 对应的 GPIO 引脚输出低电平。通过对置位/复位寄存器的操作,可以通过原子操作(原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一 直运行到结束)有针对性地改变 GPIO 个别引脚的输出状态,而不影响其他引脚 状态,简化了程序编写。

例:将 GPIOA 的 3 号、10 号引脚输出低电平。

读-修改-写操作: GPIOA->ODR&=~(1<<3|1<<10);

原子操作: GPIOA->BSRRH=1<<3|1<<10;

例:将 GPIOA 的 2 号、8 号引脚输出高电平。 

读-修改-写操作:GPIOA->ODR|=1<<2|1<<8;

原子操作:GPIOA->BSRRL=1<<2|1<<8;

置位/复位寄存器如图所示。

图中,BRy 表示端口 x 的复位位 y(x 为端口号 A~I,y 为引脚号 0~15)。这 些位为只写形式,只能在字、半字或字节模式下访问。读取这些位可返回值 0x0000。 0:不会对相应的 ODRx 位执行任何操作。 1:对相应的 ODRx 位进行复位,对应的 GPIO 引脚输出低电平。 BSy 表示端口 x 的复位位 y(x 为端口号 A~I,y 为引脚号 0~15)。这些位为只写形式,只能在字、半字或字节模式下访问。读取这些位可返回值 0x0000。 0:不会对相应的 ODRx 位执行任何操作。 1:对相应的 ODRx 位进行置位,对应的 GPIO 引脚输出高电平。 需要注意的是,如果同时对 BSy 和 BRy 置位,则 BSy 的优先级更高。 通过 GPIO 的结构图可以看到,置位/复位寄存器的输出连接到输出数据寄存器,因此操作置位/复位寄存器最终会影响到输出数据寄存器的内容,从而改 变 GPIO 引脚的输出状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值