求助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:46 编辑
不知道,图片怎么显示不了,所以找了个图床重新传了一次
页:
[1]