|
接线图如下:
本次用到的库函数与3-1、3-2一致
RCC.h说明:
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
使能或者失能AHB外设时钟
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
APB1,APB2同理,第一个参数选择外设,第二个参数使能或失能
GPIO.h说明(1):
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
:复位GPIO外设
void GPIO_AFIODeInit(void);
:复位AFIO外设
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
:用结构体函数初始化GPIO口。先定义一个结构体变量,再给结构体赋值,最后调用这个函数
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
读(4)
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
:读取输入数据寄存器某一个端口的值,参数用来指定端口,uint8_t 代表这个端口的高低电平
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);
:读取整个输出数据寄存器
写(4)
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);
:前两个参数指定端口,BitVal根据第三个参数的值指定端口
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
:第一个参数选择外设,PortVal可以对16个端口写入操作
Delay.c延时函数:
#include "stm32f10x.h"
/**
* @brief 微秒级延时
* @param xus 延时时长,范围:0~233015
* @retval 无
*/
void Delay_us(uint32_t xus)
{
SysTick->LOAD = 72 * xus; //设置定时器重装值
SysTick->VAL = 0x00; //清空当前计数值
SysTick->CTRL = 0x00000005; //设置时钟源为HCLK,启动定时器
while(!(SysTick->CTRL & 0x00010000)); //等待计数到0
SysTick->CTRL = 0x00000004; //关闭定时器
}
/**
* @brief 毫秒级延时
* @param xms 延时时长,范围:0~4294967295
* @retval 无
*/
void Delay_ms(uint32_t xms)
{
while(xms--)
{
Delay_us(1000);
}
}
/**
* @brief 秒级延时
* @param xs 延时时长,范围:0~4294967295
* @retval 无
*/
void Delay_s(uint32_t xs)
{
while(xs--)
{
Delay_ms(1000);
}
}
主函数main.c:
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
/*开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//开启GPIOB的时钟
//使用各个外设前必须开启时钟,否则对外设的操作无效
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure;
//定义结构体变量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
//GPIO引脚,赋值为第12号引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO速度,赋值为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
//将赋值后的构体变量传递给GPIO_Init函数
//函数内部会自动根据结构体的参数配置相应寄存器
//实现GPIOB的初始化
/*主循环,循环体内的代码会一直循环执行*/
while (1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
//将PB12引脚设置为低电平,蜂鸣器鸣叫
Delay_ms(100);
//延时100ms
GPIO_SetBits(GPIOB, GPIO_Pin_12);
//将PB12引脚设置为高电平,蜂鸣器停止
Delay_ms(100);
//延时100ms
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
//将PB12引脚设置为低电平,蜂鸣器鸣叫
Delay_ms(100);
//延时100ms
GPIO_SetBits(GPIOB, GPIO_Pin_12);
//将PB12引脚设置为高电平,蜂鸣器停止
Delay_ms(700);
//延时700ms
}
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|