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

[复制链接]
2481|2
 楼主| 58180698 发表于 2012-8-5 09:23 | 显示全部楼层 |阅读模式
手上有块STM32F0 Discovery的板子,刚开始学STM32,先上代码吧。
  1. #include "stm32f0xx.h"
  2. #include "main.h"


  3. void SystemInit(void){}
  4.         
  5. long RCC_Tmp[10];
  6. long GPIO_Tmp[10];
  7.         
  8. void SysInit(void)
  9. {

  10. ///////////  配置RCC  /////////////////////////////

  11. RCC_Tmp[0]  =  RCC->CR;

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

  13. RCC_Tmp[1] = RCC->CR;
  14.         

  15. RCC_Tmp[2] = RCC->AHBENR;

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

  17. RCC_Tmp[3] = RCC->AHBENR;
  18.         

  19. RCC_Tmp[4] = RCC->AHBRSTR;

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

  21. RCC_Tmp[5] = RCC->AHBRSTR;
  22.         

  23. RCC_Tmp[2] = RCC->AHBENR;

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

  25. RCC_Tmp[3] = RCC->AHBENR;
  26.         

  27. RCC_Tmp[6] = RCC->CR2;

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

  29. RCC_Tmp[7] = RCC->CR2;

  30. ///////////////////////////////////////////////////

  31. /////////////// 配置GPIOC //////////////////////////////

  32. GPIO_Tmp[0] = GPIOC->MODER;

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

  34. GPIO_Tmp[1] = GPIOC->MODER;
  35.         

  36. GPIO_Tmp[2] = GPIOC->ODR;

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

  38. GPIO_Tmp[3] = GPIOC->ODR;
  39.         

  40. GPIO_Tmp[4] = GPIOC->OSPEEDR;

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

  42. GPIO_Tmp[5] = GPIOC->OSPEEDR;
  43.   //////////////////////////////////////////////////////////
  44. }


  45. int main(void)
  46. {

  47. SysInit();


  48. while (1)

  49. {

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

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

  52. }}


 楼主| 58180698 发表于 2012-8-5 09:24 | 显示全部楼层
为什么第24行的代码注释起来后,就可以将GPIO配置为输出,
如何执行了,测GPIO不能配置,我通过仿真器看到的。
 楼主| 58180698 发表于 2012-8-5 11:14 | 显示全部楼层
已经解决,RCC_AHBRSTR的置位或者清零需要由软件来操作,硬件不会自动将1置为0 data1.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

8

主题

100

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部