标签:
杂谈 |
分类: 【stm32】 |
功能:使PA8口LED闪烁,低电平点亮
工程文件:

设置某个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_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_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;//?¨???á????±???
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(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);
}
}