Неверное значение при чтении регистра GPIOB_IDR - PullRequest
0 голосов
/ 01 июля 2019

Я борюсь с программированием руки stm32f030r8 на Atollic True Studio Ide.

У меня есть некоторые проблемы с чтением правильных данных из регистра IDR.

Я делаю выпадающий регистр PUPR GPIOB (0,1,2,3).

Другие выводы GPIOB выводятся с помощью регистра MODER.

, когда я читаю данные idr в цикле каждый раз, когда я читаю значение F, но нет никакихввод.

Пожалуйста, помогите мне решить эту проблему [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 ]

2 голосов
/ 01 июля 2019

Вы пытаетесь установить регистр gpio перед включением периферийных часов.Таким образом, вы не можете писать ни в один из его регистров.

0 голосов
/ 07 июля 2019

Я нашел решение. Решение состоит в том, что мне пришлось установить все регистры gpio после включения периферийных часов.

#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_RCC->AHBENR|=(1<<18); //enable gpiob clock source
 GPIOB->PUPDR|=0xAA; //set firt 4 bit of gpiob as pull down
 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;
}
...