caoxiaolin 发表于 2021-12-27 18:40:22

求助GPIOC_CRL和GPIOC_CRL&0xFFFFFFFF的区别

本帖最后由 caoxiaolin 于 2021-12-27 19:16 编辑

新人求助GPIOC_CRL和GPIOC_CRL&0xFFFFFFFF的区别
https://s4.ax1x.com/2021/12/27/TDD2rT.pnghttps://s4.ax1x.com/2021/12/27/TDD6x0.png
这个寄存器是只写的,我红框哪里
写GPIOC_CRL不能读出数据很正常,但是为啥GPIOC_CRL&0xFFFFFFFF 就可以呢

https://s4.ax1x.com/2021/12/27/TDDgMV.png

上图是我写的初始化,先将GPIOC_CRL要设置的位清零,然后在或上设置的值
今天看手册的时候发现GPIOC_CRL寄存器是只写的,我这样写怎么能读出数据呢?望大佬们指教
下图有汇编代码
https://s4.ax1x.com/2021/12/27/TDDy2q.png


部分程序main.c
#include "stm32f10x.h"
#include "digital_display.h"
#include "led_74hc595.h"

void SystemInit(void);

int main()
{      
      
      set_digital_display(6);
      set_led_74hc595(GPIOC_CRL&0xFFFFFFFF); //显示GPIOG_CRL的值
      //rest_led_74hc595();
      while(1)
      {
               
      }
}

void SystemInit(void)
{
      init_digital_display();
      init_led_74hc595();
}



digital_display.h
#ifndef DIGITAL_DISPLAY_H
#define DIGITAL_DISPLAY_H

#include "stm32f10x.h"

//GPIOC 0-7 推拉模式 速度50MHZ
extern void init_digital_display(void);
//显示数字
extern void set_digital_display(uint8_t num);

#endif

digital_display.cvoid init_digital_display(void)
{
      RCC_APB2ENR = (RCC_APB2ENR & ~((uint32_t)0x1<<4)) | ((uint32_t)0x1 << 4); //打开GPIOC的时钟
      GPIOC_CRL = (GPIOC_CRL & ~(uint32_t)0x0FFFFFFF) | ((uint32_t)0x03333333);
      GPIOC_BSRR |= 0x0000ffff; //gpioc 0-7 全部设置为高电平,灯全灭
}

已经解决




caoxiaolin 发表于 2021-12-27 18:42:07

本帖最后由 caoxiaolin 于 2021-12-27 18:46 编辑

不知道,图片怎么显示不了,所以找了个图床重新传了一次
页: [1]
查看完整版本: 求助GPIOC_CRL和GPIOC_CRL&0xFFFFFFFF的区别