1、LED闪烁&LED流水灯&蜂鸣器
1.使用RCC开启GPIO时钟
2.使用GPIO_Init函数初始化GPIO
3.使用输入或输出函数控制GPIO口
RCC常用的3个库函数:
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void GPIO_DeInit(GPIO_TypeDef* GPIOx); //所指定的GPIO外设会被复位void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); //用结构体的参数来初始化GPIO口
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //结构体变量赋一个默认值
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); //GPIO读取函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); //GPIO写入函数
GPIO_Mode_AIN //模拟输入GPIO_Mode_IN_FLOATING = 0x04, //浮空输入
GPIO_Mode_IPD = 0x28, //下拉输入
GPIO_Mode_IPU = 0x48, //上拉输入
GPIO_Mode_Out_OD = 0x14, //开漏输出
GPIO_Mode_Out_PP = 0x10, //推挽输出
GPIO_Mode_AF_OD = 0x1C, //复用开漏
GPIO_Mode_AF_PP = 0x18 //复用推挽
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //指定端口设置为高电平void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //低电平
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
#include "Device/Include/stm32f10x.h" // Device header
#include "Delay.h"
int main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructer;
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructer);
//GPIO_ResetBits(GPIOA,GPIO_Pin_0);
//GPIO_SetBits(GPIOA,GPIO_Pin_0);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
Delay_ms(500);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
Delay_ms(500);
// GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
// Delay_ms(500);
// GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
// Delay_ms(500);
}
}
把LED长脚接A0,短脚接-,LED闪烁:推挽输出,高低电平均可驱动。
#include "Device/Include/stm32f10x.h" // Device header
#include "Delay.h"
int main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructer;
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_All;//GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructer);
// //GPIO_ResetBits(GPIOA,GPIO_Pin_0);
// //GPIO_SetBits(GPIOA,GPIO_Pin_0);
// GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
while(1)
{
GPIO_Write(GPIOA,~0x0001);//0000000000000001
Delay_ms(500);
GPIO_Write(GPIOA,~0x0002);//0000000000000010
Delay_ms(500);
GPIO_Write(GPIOA,~0x0004);//0000000000000100
Delay_ms(500);
GPIO_Write(GPIOA,~0x0008);//0000000000001000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0010);//0000000000010000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0020);//0000000000100000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0040);//0000000001000000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0080);//0000000010000000
Delay_ms(500);
}
}
#include "Device/Include/stm32f10x.h" // Device header
#include "Delay.h"
int main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructer;
GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructer.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructer);
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Delay_ms(100);
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Delay_ms(700);
}
}