加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用库函数实现GPIO端口操作

(2013-06-01 15:16:29)
标签:

杂谈

分类: 【stm32】

功能:使PA8口LED闪烁,低电平点亮
工程文件:使用库函数实现GPIO端口操作 - 苏打驴 - 此时此刻

设置某个IO又不想影响其他IO,直接或就可以
比如要设置PA7输出高。
我直接GPIOA->ODR|=1<<7;
就可以了,不用去读其他IO状态的。

首先配置GPIO时钟(需要放在程序靠前),这儿有两种方法:
1.使用库函数RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 【在库函数207页】
2.使用函数模块
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit(); 
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1); 
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
// FLASH_SetLatency(FLASH_Latency_2);
// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}

然后配置GPIO:
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义指向结构体的指针类型
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;//选中管脚8,库函数124页
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置选中管脚的速率
    GPIO_Init(GPIOA, &GPIO_InitStructure);//根据GPIO_InitStructure 中指定的参数初始化外设 GPIOx 寄存器 
GPIO_SetBits(GPIOA,GPIO_Pin_8);//拉高
}

所有代码如下
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
// void RCC_Configuration(void)
// {
// ErrorStatus HSEStartUpStatus;
// RCC_DeInit(); 
// RCC_HSEConfig(RCC_HSE_ON);
// HSEStartUpStatus = RCC_WaitForHSEStartUp();
//
// if(HSEStartUpStatus == SUCCESS)
// {
// RCC_HCLKConfig(RCC_SYSCLK_Div1); 
// RCC_PCLK2Config(RCC_HCLK_Div1);
// RCC_PCLK1Config(RCC_HCLK_Div2);
//
// // FLASH_SetLatency(FLASH_Latency_2);
//
// // FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
// RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
// RCC_PLLCmd(ENABLE);
// while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
// {
// }
// RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// while(RCC_GetSYSCLKSource() != 0x08)
// {
// }
// }

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// }
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
}
int main(void)
{
// RCC_Configuration();
// SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_Configuration();
delay_init(72);  
NVIC_Configuration();
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delay_ms(250);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
delay_ms(250);//一定要加延时
}
}


附上两个灯都闪的:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
// void RCC_Configuration(void)
// {
//  ErrorStatus HSEStartUpStatus;
//  RCC_DeInit(); 
//  RCC_HSEConfig(RCC_HSE_ON);
//  HSEStartUpStatus = RCC_WaitForHSEStartUp();
// 
//  if(HSEStartUpStatus == SUCCESS)
//  {
//  RCC_HCLKConfig(RCC_SYSCLK_Div1); 
//  RCC_PCLK2Config(RCC_HCLK_Div1);
//  RCC_PCLK1Config(RCC_HCLK_Div2);
// 
// //  FLASH_SetLatency(FLASH_Latency_2);
// 
// //  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
//  RCC_PLLCmd(ENABLE);
//  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
//  {
//  }
//  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//  while(RCC_GetSYSCLKSource() != 0x08)
//  {
//  }
//  }

//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// }

void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//?&uml;???&aacute;????±???
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
int main(void)
{
// RCC_Configuration();
// SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);
GPIO_Configuration();
delay_init(72);  
NVIC_Configuration();
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
delay_ms(250);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
delay_ms(250);
}
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有