读取GPIOB_IDR寄存器时的值不正确

时间:2019-06-30 21:19:15

标签: c arm nucleo stm32f0

我很难在atollic True Studio IDE上使用stm32f030r8手臂编程。

我从idr寄存器读取正确的数据时遇到了一些问题。

我制作了GPIOB(0,1,2,3)的下拉PUPR寄存器。

我用MODER寄存器输出的GPIOB的其他引脚。

每当我读取F值但没有任何输入时,都在循环下读取idr数据时。

请帮助我解决此问题[You can see value that i read when debugging[1]

There is no any input It has to read 0x00

#include "main.h"
int main(void)
{
 volatile static uint16_t PortDataInput=0x00;
 RCC->CR|=(uint32_t)0xF1; //set hsi clock source and with max speed
 GPIOB->PUPDR|=0xAA; //set firt 4 bit of gpiob as pull down
 GPIOB_RCC->AHBENR|=(1<<18); //enable gpiob clock source
 GPIOB->MODER|=0x55555500; //set firt 4 bit of gpiob as input
 GPIOB->OTYPER|=0x00000000; //set output pins of gpiob as push pull
 while (1)
 { 
 PortDataInput=GPIOB->IDR;
 PortDataInput&=0xF;
 }

2 个答案:

答案 0 :(得分:2)

您尝试在启用外设时钟之前设置gpio寄存器。因此,您无法写入其任何寄存器。

答案 1 :(得分:0)

我找到了解决方案。  解决的办法是。启用外围时钟后,我必须设置所有gpio寄存器。

ExtensionContext.Store