GPIO
面包板两端横向是相通的,内部是纵向相通
LED闪烁
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//第一步:使用RCC开启GPIO时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//第二步:使用GPIO_Init()初始化GPIO
//GPIO_ResetBits(GPIOA,GPIO_Pin_0);//灯亮
//GPIO_SetBits(GPIOA,GPIO_Pin_0);//灯灭
//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//灯亮
//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//灯灭
//第三步:使用输出或者输入的函数控制GPIO口
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
Delay_ms(100);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
Delay_ms(100);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);
Delay_ms(500);
}
}
LED流水灯
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//第一步:使用RCC开启GPIO时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;//初始化所有端口
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//第二步:使用GPIO_Init()初始化GPIO
//GPIO_ResetBits(GPIOA,GPIO_Pin_0);//灯亮
//GPIO_SetBits(GPIOA,GPIO_Pin_0);//灯灭
//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//灯亮
//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//灯灭
//第三步:使用输出或者输入的函数控制GPIO口
while(1)
{
// GPIO_Write(GPIOA,~0x0001);
// Delay_ms(500);
// GPIO_Write(GPIOA,~0x0002);
// Delay_ms(500);
// GPIO_Write(GPIOA,~0x0004);
// Delay_ms(500);
// GPIO_Write(GPIOA,~0x0008);
// Delay_ms(500);
// GPIO_Write(GPIOA,~0x0010);
// Delay_ms(500);
// GPIO_Write(GPIOA,~0x0020);
// Delay_ms(500);
// GPIO_Write(GPIOA,~0x0040);
// Delay_ms(500);
// GPIO_Write(GPIOA,~0x0080);
// Delay_ms(500);
unsigned char i ;
for( i = 0 ; i < 8 ;i++)
{
GPIO_Write(GPIOA,~(0x0001 << i));
Delay_ms(500);
}
}
}
蜂鸣器
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//第一步:使用RCC开启GPIO时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//初始化12端口
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//第二步:使用GPIO_Init()初始化GPIO
//GPIO_ResetBits(GPIOA,GPIO_Pin_0);//灯亮
//GPIO_SetBits(GPIOA,GPIO_Pin_0);//灯灭
//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//灯亮
//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//灯灭
//第三步:使用输出或者输入的函数控制GPIO口
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);
}
}
按键控制LED
key.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
/**
* @brief 初始化位于PB1以及PB11按键
* @param 无
* @retval 无
*/
void Key_Init(void)//配置按键
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//需要读取按键,设置上拉输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速度,输入不影响
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
/**
* @brief 获取所按下的键值
* @param 无
* @retval KeyNum 按下的键值
*/
uint8_t Key_GetNum(void)
{
uint8_t KeyNum = 0;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)
{
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)
//此时处于一直按下的状态
Delay_ms(20);
KeyNum = 1;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0)
{
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0)
//此时处于一直按下的状态
Delay_ms(20);
KeyNum = 2;
}
return KeyNum;
}
LED.c
#include "stm32f10x.h" // Device header
/**
* @brief 打开GPIO时钟,并进行初始化
* @param 无
* @retval 无
*/
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//第一步:使用RCC开启GPIO时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//第二步:使用GPIO_Init()初始化GPIO
// GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
}
/**
* @brief 将位于PA1端口电平置零
* @param 无
* @retval 无
*/
void LED1_On(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
/**
* @brief 将位于PA1端口电平置一
* @param 无
* @retval 无
*/
void LED1_Off(void)
{
GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
/**
* @brief 查看PA1端口电平并将其翻转
* @param 无
* @retval 无
*/
void LED1_Turn(void)
{
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1) == 0)//查看当前端口输出
{
GPIO_SetBits(GPIOA,GPIO_Pin_1);//将其置一
}
else
{
GPIO_ResetBits(GPIOA,GPIO_Pin_1);//将其置零
}
}
/**
* @brief 将位于PA2端口电平置零
* @param 无
* @retval 无
*/
void LED2_On(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
/**
* @brief 将位于PA1端口电平置一
* @param 无
* @retval 无
*/
void LED2_Off(void)
{
GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
/**
* @brief 查看PA2端口电平并将其翻转
* @param 无
* @retval 无
*/
void LED2_Turn(void)
{
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2) == 0)//查看当前端口输出
{
GPIO_SetBits(GPIOA,GPIO_Pin_2);//将其置一
}
else
{
GPIO_ResetBits(GPIOA,GPIO_Pin_2);//将其置零
}
}
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
uint8_t KeyNum;
int main(void)
{
LED_Init();
Key_Init();
while(1)
{
KeyNum = Key_GetNum();//获取键值
if(KeyNum == 1)//如果键1按下,则翻转LED1电平
{
LED1_Turn();
}
if(KeyNum == 2)//如果键2按下,则翻转LED1电平
{
LED2_Turn();
}
}
}
光敏传感器控制蜂鸣器
LightSensor.c
#include "stm32f10x.h" // Device header
/**
* @brief 初始化端口在PB^13光敏传感器
* @param 无
* @retval 无
*/
void LightSensor_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//第一步:使用RCC开启GPIO时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//第二步:使用GPIO_Init()初始化GPIO
}
/**
* @brief 获得当前光敏传感器输入电平
* @param 无
* @retval 返回周围光线情况
*/
uint8_t LightSensor_Get(void)
{
return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
//周围暗的时候输入1;亮的时候输入0
//周围暗的时候输出0;亮的时候输出1
}
Buzzer.c
#include "stm32f10x.h" // Device header
/**
* @brief 打开GPIO时钟,并进行初始化
* @param 无
* @retval 无
*/
void Buzzer_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//第一步:使用RCC开启GPIO时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//第二步:使用GPIO_Init()初始化GPIO
GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
/**
* @brief 将位于PB12端口电平置零
* @param 无
* @retval 无
*/
void Buzzer_On(void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}
/**
* @brief 将位于PB12端口电平置一
* @param 无
* @retval 无
*/
void Buzzer_Off(void)
{
GPIO_SetBits(GPIOB,GPIO_Pin_12);
}
/**
* @brief 查看PB12端口电平并将其翻转
* @param 无
* @retval 无
*/
void Buzzer_Turn(void)
{
if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12) == 0)//查看当前端口输出
{
GPIO_SetBits(GPIOB,GPIO_Pin_12);//将其置一
}
else
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);//将其置零
}
}
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "LightSensor.h"
int main(void)
{
Buzzer_Init();
LightSensor_Init();
while(1)
{
if(LightSensor_Get() == 1)//比较暗的时候
{
Buzzer_On();
}
else{
Buzzer_Off();
}
}
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_45981247/article/details/135852319
|
|