打印

STM32F0位带区操作问题

[复制链接]
408|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Spikess|  楼主 | 2020-4-20 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用F1-霸道视频学STM32F030R8,发现有很多不一样的地方,到了位带操作这里卡住了,没找到 位带这块资料,是不是M0不支持位带操作?翻出F429挑战者,可实现位带操作。
  在网上找了几个资料看了一下,从新修改了代码如下:


   #ifndef   __LED_H__
  #define   __LED_H__
  #include "stm32f0xx.h"
  #define   LED_Pin   GPIO_Pin_7

  #define   LED_Port   GPIOC
  #define   LED_CLK    RCC_AHBPeriph_GPIOC  
#define   On       1
#define   Off      0

typedef struct _16_Bits_Struct
{
     uint16_t bit0  : 1;
     uint16_t bit1  : 1;
     uint16_t bit2  : 1;
     uint16_t bit3  : 1;
     uint16_t bit4  : 1;
     uint16_t bit5  : 1;
     uint16_t bit6  : 1;
     uint16_t bit7  : 1;
     uint16_t bit8  : 1;
     uint16_t bit9  : 1;
     uint16_t bit10 : 1;
     uint16_t bit11 : 1;
     uint16_t bit12 : 1;
     uint16_t bit13 : 1;
     uint16_t bit14 : 1;
     uint16_t bit15 : 1;
} Bits_16_TypeDef;
#define  LED0           (((Bits_16_TypeDef *)(&(LED_Port->ODR)))->bit7)//输出
#endif初始化以后  LED0=On;和LED0=Off;  是可以亮灭的。

这个代码原作者说F0/F1/F4都可以使用,我分析代码还是在操作ODR寄存器,跟位带没关系。
请问:1.上边代码和直接操ODR寄存器作有什么不同?
2.位带操作比较麻烦(比寄存器),为什么ST官方还要在F1/F4(我知道的)加上位带区,位带操作的好处是什么?

我在网上看到这么一段话:虽然很多产品提供了访问每个管脚的寄存器,但只有位带确保访问某个管脚的时候一定不会影响其他管脚,即使寄存器的值有问题。

使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2020-4-20 14:09 | 只看该作者
标准的M0确实没有位带功能

部分厂家M0有,看具体手册

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

417

主题

421

帖子

0

粉丝