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);
	}
}
相关推荐
YJlio4 小时前
ShareEnum 学习笔记(9.5):内网共享体检——开放共享、匿名访问与权限风险
大数据·笔记·学习
泽虞5 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
FakeOccupational5 小时前
电路笔记(信号):网线能传多少米?网线信号传输距离
开发语言·笔记·php
Yawesh_best15 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
Ccjf酷儿17 小时前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y17 小时前
python笔记梳理以及一些题目整理
开发语言·笔记·python
在逃热干面18 小时前
(笔记)自定义 systemd 服务
笔记
DKPT19 小时前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
QT 小鲜肉20 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇
笔记·读书·孙子兵法
星轨初途21 小时前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法