您的位置 首页 嵌入式

STM32F0 驱动GPIO口输出

之前老是不能点亮LED,连仿真器才发现,在未开户GPIO时钟使用的情况下,是无法配置GPIO寄存器的。测试代码如下:#includestm32f0xx.h#i…

之前老是不能点亮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即可处理。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/254963.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部