野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8704|回复: 1

使能时钟的小问题

[复制链接]
发表于 2020-1-22 12:22:51 | 显示全部楼层 |阅读模式
使能多个外设的时钟时为什么可以用 |,而不是用&? 5882b2b7d0a20cf471ede17871094b36acaf9913.png

回复

使用道具 举报

 楼主| 发表于 2020-1-25 20:07:54 | 显示全部楼层
我自己想明白了!现在分享给大家参考参考,如果错误请批评指正。

STM32的外设在使用之前必须先对其使能!
只要在同一条总线上外设,可以利用“|”对多个外设时钟进行同时使能!
“|”是个位运算符,如0000 1111 | 1111 0000 = 1111 1111

比如:
使能APB2总线上的GPIOD和GPIOE。

APB2ENR的复位值为0x0000 0000
如果使能了ENABLE

RCC->APB2ENR |= RCC_APB2Periph;    //  “|=”   >>>置1
                                                             “&=~”  >>>清零

其中RCC_APB2Periph --- RCC_APB2Periph_GPIOD >>>> ((uint32_t)0x00000020)
                               --- RCC_APB2Periph_GPIOE >>>> ((uint32_t)0x00000040)

0x 0000 0000
"|"
0x 0000 0020

这里的0020 即0000 0000 0010 0000
对应STM32F10x参考手册,查找RCC_APB2ENR,低16位有效
第5位为1,即开启了IO端口D时钟


这里的0040 即0000 0000 0100 0000
对应STM32F10x参考手册,查找RCC_APB2ENR,低16位有效
第6位为1,即开启了IO端口E时钟

所以对于在同一条总线上外设,如果使能多个外设时钟,可以用“|”来同时使能。

回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-20 13:24 , Processed in 0.045955 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表