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);
	}
}
相关推荐
ajsbxi31 分钟前
【Java 基础】核心知识点梳理
java·开发语言·笔记
呱呱巨基1 小时前
vim编辑器
linux·笔记·学习·编辑器·vim
新子y1 小时前
【小白笔记】普通二叉树(General Binary Tree)和二叉搜索树的最近公共祖先(LCA)
开发语言·笔记·python
聪明的笨猪猪1 小时前
Java JVM “调优” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
爱学习的uu1 小时前
CURSOR最新使用指南及使用思路
人工智能·笔记·python·软件工程
YuCaiH1 小时前
Linux文件处理
linux·笔记·嵌入式
Cathy Bryant2 小时前
大模型损失函数(二):KL散度(Kullback-Leibler divergence)
笔记·神经网络·机器学习·数学建模·transformer
qq_398586542 小时前
Threejs入门学习笔记
javascript·笔记·学习
hour_go3 小时前
TCP/IP协议相关知识点
网络·笔记·网络协议·tcp/ip
潘达斯奈基~3 小时前
在使用spark的applyInPandas方法过程中,遇到类型冲突问题如何解决
大数据·笔记