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

server/2025/1/23 2:34:13/

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_PPGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // 选择引脚0GPIO_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_PPGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // 选择引脚0GPIO_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_PPGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2; // 选择引脚0GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 设置输出速度为50MHzGPIO_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_PPGPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // 选择引脚0GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 设置输出速度为50MHzGPIO_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);}
}

http://www.ppmy.cn/server/160626.html

相关文章

Vue3轮播图左右联动

1、轮播图部分&#xff0c;右边鼠标移入&#xff0c;左边对应展示轮播图 可以在swiper 官网 Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 选择vue中使用swiper npm i swiper 左右两边的联动&#xff1a;左边的轮播图和右边的小的列表他们的列表组成结构是一样的&#…

【Red Hat8】:搭建FTP服务器

目录 一、匿名FTP访问 1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 5、安装VSFTPD 6、 打开配置文件 7、设置配置文件如下几个参数 8、重启vsftpd服务 9、进入图形化界面配置网络 10、查看IP地址 11、安装ftp服务 12、遇到拒绝连接 13、测试 二、本地…

Golang的网络编程安全

Golang的网络编程安全 一、Golang网络编程的基本概念 作为一种现代化的编程语言&#xff0c;具有优秀的并发特性和网络编程能力。在Golang中&#xff0c;网络编程是非常常见的需求&#xff0c;可以用于开发各种类型的网络应用&#xff0c;比如Web服务、API服务、消息队列等。Go…

C#中的语句

C#提供了各式各样的语句&#xff0c;大多数是由C和C发展而来&#xff0c;当然&#xff0c;在C#中做了相应修改。语句和表达式一样&#xff0c;都是C#程序的基本组成部分&#xff0c;在本文我们来一起学习C#语句。 1.语句 语句是构造所有C#程序的过程构造块。在语句中可以声明…

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测 目录 WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于WOA-CNN-GRU-Attention、…

浅谈云计算21 | Docker容器技术

Docker容器技术 一、 容器技术特性1.1 轻量级特性1.2 隔离性特性 二、容器镜像2.1 容器镜像概述2.1.1 定义与构成2.1.2 分层结构 2.2 联合文件系统2.3 容器镜像的构建与管理2.3.1 容器镜像的构建2.3.2 **构建镜像流程**2.3.3 **应用场景**2.3.4 镜像仓库的应用 2.4 容器镜像的优…

MongoDB基本操作

一、实验目的 1. 熟悉MongoDB的基本操作&#xff0c;包括CRUD&#xff08;增加、读取、更新、删除&#xff09;。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…

.net无运行时发布原理

一、引言 在.NET 的演进历程中&#xff0c;每一次版本的更迭都如同一颗投入湖面的石子&#xff0c;激起层层创新的涟漪。而.NET 6&#xff0c;无疑是其中一颗璀璨的明珠&#xff0c;其作为微软推出的重要里程碑版本&#xff0c;为开发者带来了诸多令人眼前一亮的新特性与优化。…