新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32F0 驅(qū)動(dòng)GPIO口輸出

STM32F0 驅(qū)動(dòng)GPIO口輸出

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏
之前老是不能點(diǎn)亮LED,連仿真器才發(fā)現(xiàn),在未開(kāi)戶GPIO時(shí)鐘使用的情況下,是無(wú)法配置GPIO寄存器的。
測(cè)試代碼如下:

本文引用地址:http://m.butianyuan.cn/article/201612/325080.htm
#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; //外部高速時(shí)鐘旁路
RCC_Tmp[1] = RCC->CR;
RCC_Tmp[2] = RCC->AHBENR;
RCC->AHBENR |= 1<<19; //使能PORTC的時(shí)鐘
RCC_Tmp[3] = RCC->AHBENR;
// RCC_Tmp[4] = RCC->AHBRSTR;
// //RCC->AHBRSTR |= 1<<19 ;//復(fù)位PORTC
// RCC_Tmp[5] = RCC->AHBRSTR;
RCC_Tmp[6] = RCC->CR2;
RCC->CR2 |= 1<<0; // HSI14震蕩器關(guān)閉
RCC_Tmp[7] = RCC->CR2;
///////////////////////////////////////////////////
/////////////// 配置GPIOC //////////////////////////////
GPIO_Tmp[0] = GPIOC->MODER;
GPIOC->MODER |= 0x05 <<16; //配置PC8PC9為通用輸出
GPIO_Tmp[1] = GPIOC->MODER;
GPIO_Tmp[2] = GPIOC->ODR;
GPIOC->ODR |= 0x01<<8; //PC8PC9輸出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;
}
}

待解決的問(wèn)題:
1、在配置RCC_AHBRSRT寄存器時(shí),復(fù)位操作GPIOC,以后面的代碼中也無(wú)法配置GPIO寄存器。
2、如何在仿真時(shí)直接查看寄存器中的值,而不是通過(guò)在程序中將寄存器的值對(duì)變量賦值查看。
另:
在用KEIL復(fù)制代碼到網(wǎng)頁(yè)中出現(xiàn)亂碼時(shí),可按下圖設(shè)置一下KEIL即可解決。



評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉