你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32学习笔记之寄存器代码解析(F4)

[复制链接]
STMCU小助手 发布时间:2022-7-5 17:19
选自,STM32F4之寄存器实现跑马灯实验

  1. GPIOF->MODER &=~(3<<2*9)//清零,第19位,18位的值为00
复制代码

其中:~非运算,表示取反,例111111001111取反后为000000110000,方便我们计算其值。
&表示进行与运算,例1&0=0,1&1=1
|表示或运算,例1|0=1,1|1=1.
注:MODER &=B表示位MODR =MODER&B

一、GPIO 端口模式寄存器 (GPIOx_MODER) (x = A…I)
1.将18,19位清零*


[什么要配置MODER9=01 ?Y因为此时是pin9脚,故必须配置MODER9=01 ]
第一步:先将18,19位清零,再将这两位配置为MODER9=01,通用输出模式
数字3:表示18,19位为1,即11=3,
第二步,移位:3<< 2×9:表示11向左移动18位。此时18,19位的值为11,而MODER是两位的,故显示为2×9
此时除18,19位为11.其他的30位均为0,再通过取反操作:~,可以实现将18,19位清零的作用。
我们通过查询F4芯片资料手册的187页,可以得到如下所示GPIO端口模式寄存器的表格如下所示

2.配置MODER=01,通用输出模式(将18,19位值设置位01)


GPIOF->MODER |=(1<<2*9)//置位,第19位,18位的值为01
01=1,然后左移18位,配置MODER=01,通用输出模式。

二、GPIO 端口输出类型寄存器 (GPIOx_OTYPER)

[)J[$D`Y{WSH$(DK@Q$L`KN.png

将OTYPER9配置为OTYPER9=0(输出推挽)单字节
  1. GPIOF->OTYPER &=~(1<<9)//将第9位清零(单字节)
  2. GPIOF->OTYPER |=(0<<9)//将第9位置零(单字节)
复制代码

三、GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR)

6`26){OSB(80REG])`_9(KA.png

将OSPEEDR寄存器配置为10,OSPEEDR9=10(50MHz)

  1. GPIOF->OSPEEDR &=~(3<<2*9)//将第18,19位清零(双字节)
  2. GPIOF->OSPEEDR |=(2<<2*9)//将第19,18位置为10(双字节)
复制代码

四、GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR)

P(U(Q0R1%)IEDV0$C~O2)44.png

将PUPDR寄存器配置为01,PUPDR9=01(上拉)
  1. GPIOF->PUPDR &=~(3<<2*9)//将第18,19位清零(双字节)
  2. GPIOF->PUPDR |=(1<<2*9)//将第19,18位置为01(双字节)
复制代码

五、GPIO 端口输出数据寄存器 (GPIOx_ODR)

PUA)E[03KY2V9_HAX{C$%_U.png

此时不用清零,直接赋值。

  1. GPIOF->ODR |=(1<<9)//将第9位置为1(单字节)
  2. //GPIOF->ODR &=~(1<<9)//将第9位置为0(单字节)
复制代码

六、RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR)

_JHVAV}([F6@)@1[(HQG86Q.png

  1. RCC->AHB1ENR |=1<<5//使能GPIOF口输出,选择使用哪一组I/O口
复制代码

总代码:led.c文件下的

  1. #include"led.h"
  2. #include"STM32F4XX.h"
  3. void LED_Init(void)
  4. {
  5. RCC->AHB1ENR |=1<<5;

  6. //PF9
  7. GPIOF->MODER &=~(3<<2*9);//清零,第19位,18位的值为00
  8. GPIOF->MODER |=(1<<2*9);//置位,第19位,18位的值为01

  9. GPIOF->OTYPER &=~(1<<9);//将第9位清零(单字节)
  10. GPIOF->OTYPER |=(0<<9);//将第9位置零(单字节)

  11. GPIOF->OSPEEDR &=~(3<<2*9);//将第18,19位清零(双字节)
  12. GPIOF->OSPEEDR |=(2<<2*9);//将第19,18位置为10(双字节)

  13. GPIOF->PUPDR &=~(3<<2*9);//将第18,19位清零(双字节)
  14. GPIOF->PUPDR |=(1<<2*9);//将第19,18位置为01(双字节)

  15. GPIOF->ODR |=(1<<9);//将第9位置为1(单字节)
  16. //GPIOF->ODR &=~(1<<9);//将第9位置为0(单字节)

  17. //PF10,注意移动的位数,每个寄存器都对应引脚10
  18. GPIOF->MODER &=~(3<<2*10);//清零,第21位,20位的值为00
  19. GPIOF->MODER |=(1<<2*10);//置位,第21位,20位的值为01

  20. GPIOF->OTYPER &=~(1<<10);//将第10位清零(单字节)
  21. GPIOF->OTYPER |=(0<<10);//将第10位置零(单字节)

  22. GPIOF->OSPEEDR &=~(3<<2*10);//将第21,20位清零(双字节)
  23. GPIOF->OSPEEDR |=(2<<2*10);//将第21,20位置为10(双字节)

  24. GPIOF->PUPDR &=~(3<<2*10);//将第21,20位清零(双字节)
  25. GPIOF->PUPDR |=(1<<2*10);//将第21,20位置为01(双字节)

  26. GPIOF->ODR |=(1<<10);//将第10位置为1(单字节)
  27. //GPIOF->ODR &=~(1<<10);//将第10位置为0(单字节)
  28. }
复制代码


UOFMMAN2GC27EB3D~[TLM~9.png
收藏 评论0 发布时间:2022-7-5 17:19

举报

0个回答

所属标签

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版