×
单片机 > 单片机程序设计 > 详情

STM32F0 驱动GPIO口输出

发布时间:2020-08-27 发布时间:
|
之前老是不能点亮LED,连仿真器才发现,在未开户GPIO时钟使用的情况下,是无法配置GPIO寄存器的。
测试代码如下:
 
 

 

#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[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;
 
    }
 
}
 

 

 

 

待解决的问题:
1、在配置RCC_AHBRSRT寄存器时,复位操作GPIOC,以后面的代码中也无法配置GPIO寄存器。
2、如何在仿真时直接查看寄存器中的值,而不是通过在程序中将寄存器的值对变量赋值查看。
 
另:
在用KEIL复制代码到网页中出现乱码时,可按下图设置一下KEIL即可解决。
 
 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向