打印

在程序中复位GPIOC端口后,为什么不能再配置?

[复制链接]
1937|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
手上有块STM32F0 Discovery的板子,刚开始学STM32,先上代码吧。
#include "stm32f0xx.h"
#include "main.h"


void SystemInit(void){}
        
long RCC_Tmp[10];
long GPIO_Tmp[10];
        
void SysInit(void)
{

///////////  配置RCC  /////////////////////////////

RCC_Tmp[0]  =  RCC->CR;

RCC->CR |= 1<<18; //外部高速时钟旁路

RCC_Tmp[1] = RCC->CR;
        

RCC_Tmp[2] = RCC->AHBENR;

RCC->AHBENR |= 1<<19; //使能PORTC的时钟

RCC_Tmp[3] = RCC->AHBENR;
        

RCC_Tmp[4] = RCC->AHBRSTR;

RCC->AHBRSTR |= 1<<19 ;//复位PORTC

RCC_Tmp[5] = RCC->AHBRSTR;
        

RCC_Tmp[2] = RCC->AHBENR;

RCC->AHBENR |= 1<<19; //使能PORTC的时钟

RCC_Tmp[3] = RCC->AHBENR;
        

RCC_Tmp[6] = RCC->CR2;

RCC->CR2 |= 1<<0; // HSI14震荡器关闭

RCC_Tmp[7] = RCC->CR2;

///////////////////////////////////////////////////

/////////////// 配置GPIOC //////////////////////////////

GPIO_Tmp[0] = GPIOC->MODER;

GPIOC->MODER |= 0x05 <<16;   //配置PC8\PC9为通用输出

GPIO_Tmp[1] = GPIOC->MODER;
        

GPIO_Tmp[2] = GPIOC->ODR;

GPIOC->ODR |= 0x01<<8; //PC8\PC9输出1

GPIO_Tmp[3] = GPIOC->ODR;
        

GPIO_Tmp[4] = GPIOC->OSPEEDR;

GPIOC->OSPEEDR |= 0x3<<16; //PC8配置为高速口

GPIO_Tmp[5] = GPIOC->OSPEEDR;
  //////////////////////////////////////////////////////////
}


int main(void)
{

SysInit();


while (1)

{

GPIOC->ODR  |= 0x01 <<9;

GPIOC->ODR &=~0X01<<9;

}}


沙发
58180698|  楼主 | 2012-8-5 09:24 | 只看该作者
为什么第24行的代码注释起来后,就可以将GPIO配置为输出,
如何执行了,测GPIO不能配置,我通过仿真器看到的。

使用特权

评论回复
板凳
58180698|  楼主 | 2012-8-5 11:14 | 只看该作者
已经解决,RCC_AHBRSTR的置位或者清零需要由软件来操作,硬件不会自动将1置为0

使用特权

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

本版积分规则

个人签名:生活注定了让我们每走一步只许成功,不许失败,只能前进,不能后退……

8

主题

100

帖子

0

粉丝