25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数

GPIO_Ini:初始化GPIO引脚的模式,速度和引脚号

GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0
GPIO输出控制函数

GPIO_SetBits:将指定的GPIO引脚设置为高电平

GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIOA的引脚0设置为高电平
GPIO_ResetBits:将指定的GPIO引脚设置为低电平

GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 将GPIOA的引脚0设置为低电平
GPIO_WriteBit:写入指定的电平状态到GPIO引脚

GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); // 将GPIOA的引脚0设置为高电平
GPIO_Write:写入一个16位值到GPIO端口

GPIO_Write(GPIOA, 0x0001); // 将GPIOA的引脚0设置为高电平,其他引脚为低电平
GPIO输入读取函数

GPIO_ReadInputDataBit:读取指定GPIO引脚的电平状态

if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_SET) {

// 引脚0为高电平

}
GPIO_ReadInputData:读取整个GPIO端口的输入状态

uint16_t portValue = GPIO_ReadInputData(GPIOA); // 读取GPIOA的输入状态
GPIO时钟使能函数

RCC_APB2PeriphClockCmd:使能GPIO端口的时钟。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA的时钟

时钟使能是指为某个外设(如GPIO、USART、SPI等)提供时钟信号,使其能够正常工作。
GPIO复用功能配置

GPIO_PinAFConfig:配置GPIO引脚的复用功能

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); // 配置GPIOA的引脚9为USART1功能

GPIO引脚的复用功能是指将GPIO引脚用于除普通输入输出之外的其他功能。STM32的GPIO引脚不仅可以作为普通的数字输入或输出,还可以配置为其他外设功能(如USART、SPI、I2C、定时器等)的引脚。

点亮LED

复制代码
#include "stm32f10x.h"  // 包含STM32F10x系列的头文件

int main(void) {
    // 使能GPIOA的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 定义并初始化GPIO结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 修正拼写错误:GPIO_Mode_OUT_PP -> GPIO_Mode_Out_PP
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // 选择引脚0
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 设置输出速度为50MHz

    // 初始化GPIOA的引脚
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 将GPIOA的引脚0设置为低电平
    GPIO_ResetBits(GPIOA, GPIO_Pin_0);  // 修正拼写错误:GPIO_ResetLBits -> GPIO_ResetBits

    // 主循环
    while (1) {
        // 可以在这里添加其他逻辑
    }
}

LED闪烁

复制代码
#include "stm32f10x.h"  // 包含STM32F10x系列的头文件
#include "Delay.h"
int main(void) {
    // 使能GPIOA的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 定义并初始化GPIO结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 修正拼写错误:GPIO_Mode_OUT_PP -> GPIO_Mode_Out_PP
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // 选择引脚0
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 设置输出速度为50MHz

    // 初始化GPIOA的引脚
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    // 主循环
    while (1) {
        GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
		Delay_ms(500);
	}
}

流水灯

复制代码
#include "stm32f10x.h"  // 包含STM32F10x系列的头文件
#include "Delay.h"
int main(void) {
    // 使能GPIOA的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 定义并初始化GPIO结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 修正拼写错误:GPIO_Mode_OUT_PP -> GPIO_Mode_Out_PP
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2; // 选择引脚0
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 设置输出速度为50MHz
	GPIO_Init(GPIOA,&GPIO_InitStructure);

    // 主循环
    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,~0x00010);
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x00020);
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x00040);
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x00080);
		Delay_ms(500);
	}
}

蜂鸣器

复制代码
#include "stm32f10x.h"  // 包含STM32F10x系列的头文件
#include "Delay.h"
int main(void) {
    // 使能GPIOA的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

    // 定义并初始化GPIO结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 修正拼写错误:GPIO_Mode_OUT_PP -> GPIO_Mode_Out_PP
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // 选择引脚0
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 设置输出速度为50MHz
	GPIO_Init(GPIOA,&GPIO_InitStructure);

    // 主循环
    while (1) {
        GPIO_Write(GPIOB,GPIO_Pin_12);
		Delay_ms(500);
		GPIO_Write(GPIOB,GPIO_Pin_12);
		Delay_ms(500);
	}
}

GPIO使用步骤:初始化时钟,然后定义结构体,赋值结构体

GPIO_Mode选择输入输出模式

GPIO_Pin选择引脚

GPIO_Speed选择速度

OLED:有机发光二极管

OLED驱动函数

STM32中断系统

外部中断

定时器

输出比较功能

输出比较(Output Compare,OC) 是定时器(Timer)的一种功能,用于生成精确的时间信号或控制外部设备(如PWM信号、脉冲生成等)。输出比较功能通过比较定时器的计数器值(CNT)和捕获/比较寄存器(CCR)的值,来触发特定的事件(如翻转输出、产生中断等)。

复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"

uint8_t i;			//定义在定时器中断里自增的变量

int main(void)
{
	/*模块初始化*/
	OLED_Init();		//OLED初始化
	PWM_Init();		//定时中断初始化
	
	
	while (1)
	{
		for(i=0;i<=100;i++){
			PWM_SetComparel(i);
			Delay_ms(10);
	}
		for(i=0;i<=100;i++){
			PWM_SetComparel(100-i);
			Delay_ms(10);
	}
}
相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
starlaky5 天前
Django入门笔记
笔记·django
勇气要爆发5 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
勇气要爆发5 天前
吴恩达《LangChain LLM 应用开发精读笔记》2-Models, Prompts and Parsers 模型、提示和解析器
android·笔记·langchain
qianshanxue115 天前
计算机操作的一些笔记标题
笔记
土拨鼠烧电路5 天前
笔记11:数据中台:不是数据仓库,是业务能力复用的引擎
数据仓库·笔记
土拨鼠烧电路5 天前
笔记14:集成与架构:连接孤岛,构建敏捷响应能力
笔记·架构
烟花落o5 天前
栈和队列的知识点及代码
开发语言·数据结构·笔记·栈和队列·编程学习