微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32F0 驱动GPIO口输出

STM32F0 驱动GPIO口输出

时间:12-02 来源:互联网 点击:
之前老是不能点亮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即可解决。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top