type
status
date
slug
summary
tags
category
icon
password
🙂
STM32F103C8T6 引脚图

💬c & h
软件I²C
bsp_myI2C.c
bsp_myI2C.h
👀环境配置
串口重定向打印输出
Keil5
假如使用usart1,在CubeMX生成的usart1.c文件末尾,添加如下内容:(代码太长,已折叠)
在
usart.h文件中,在用户代码的Prototypes的部分添加如下内容:在魔法棒的位置添加文件路径,引入这两个文件
这样,直接在
main.c中任意位置使用printf即可实现串口重定向!CMake + VSCode
retarget.cretarget.h新建一个Users目录,放在项目的Drivers目录下,将上面的c & h文件放入Drivers/Users文件夹中
在项目目录的
cmake → stm32cubemx → CMakeLists.txt中添加刚刚的文件路径:用法:
- 在 main.c 中包含 retarget.h 头文件;
- 在主函数中初始化函数;
- 在任意位置使用printf!
示例main.c:
VSCode STM32插件 浮点数输出(可选)
⚠️使用浮点数打印输出会增加编译的文件体积(大约占20K flash),建议使用自定义函数进行格式化!
在项目目录的
cmake → gcc-arm-none-eabi.cmake 文件的末尾中添加并保存:🙌例程
ADC读取电位器电压转换PWM控制360度舵机
设计功能
- 使用ADC连续采样电位器的电压值,并使用平均滤波算法处理数据
- 将采样到的电压值映射成50Hz,0.5ms~2.5ms高电平的PWM输出
- 转动电位器,使用映射后的PWM波控制360度MG90S舵机
CubeMX GPIO 设置总览
引脚 | 模式 | 上拉/下拉 | 速率 | 用途 |
PA9 | USART1_TX | ㅤ | ㅤ | TX |
PA10 | USART1_RX | ㅤ | ㅤ | RX |
PB1 | ADC1_IN9 | ㅤ | ㅤ | ADC |
PA7 | TIM3_CH2 | ㅤ | ㅤ | PWM |
CubeMX 其他设置
- RCC时钟源 HSE设置为外部晶振
- Clock时钟(HCLK)速度设置为
72MHz,ADC 6分频,ADC时钟12MHz
- ADC配置为连续采样模式,Continuous Conversion Enable
- ADC采样周期设置为
71.5 Cycles,避免采样过快造成数据误差
- Connectivity设置串口USART1,Mode设置为
Asynchronous
- 启用TIM3,勾选内部时钟,通道2设置为
PWM Generation CH2
- 预分配设置
72-1(1MHz),自动重装载值20000-1(50Hz)
main.c运行结果

ADC读取电位器电压 OLED显示输出
设计功能
- 使用ADC连续采样电位器的电压值,并使用平均滤波算法处理数据
- 将采样到的电压值显示输出在OLED屏幕上
- 转动电位器,OLED屏幕实时显示当前电位器输出电压
CubeMX GPIO 设置总览
引脚 | 模式 | 上拉/下拉 | 速率 | 用途 |
PB6 | I2C1 | 外部电阻上拉 | Fast-400 | SCL |
PB7 | I2C1 | 外部电阻上拉 | Fast-400 | SDA |
PA9 | USART1_TX | ㅤ | ㅤ | TX |
PA10 | USART1_RX | ㅤ | ㅤ | RX |
PB1 | ADC1_IN9 | ㅤ | ㅤ | ADC |
CubeMX 其他设置
- RCC时钟源 HSE设置为外部晶振
- Clock时钟(HCLK)速度设置为
72MHz,ADC 6分频,ADC时钟12MHz
- ADC配置为连续采样模式,Continuous Conversion Enable
- ADC采样周期设置为
71.5 Cycles,避免采样过快造成数据误差
- Connectivity设置I2C1,快速模式
- Connectivity设置串口USART1,Mode设置为
Asynchronous
Header & Source
oled库和font库使用 [SSD1306 I2C 128x32 屏幕显示]
main.c运行结果

SSD1306 I2C 128x32 屏幕显示
设计功能
- 使用硬件I2C向0.91寸OLED显示屏发送数据
CubeMX GPIO 设置总览
引脚 | 模式 | 上拉/下拉 | 速率 | 用途 |
PB6 | I2C1 | 外部电阻上拉 | Fast-400 | SCL |
PB7 | I2C1 | 外部电阻上拉 | Fast-400 | SDA |
PA9 | USART1_TX | ㅤ | ㅤ | TX |
PA10 | USART1_RX | ㅤ | ㅤ | RX |
CubeMX 其他设置
- RCC时钟源 HSE设置为外部晶振
- Clock时钟(HCLK)速度设置为
72MHz
- Connectivity设置I2C1,快速模式
- Connectivity设置串口USART1,Mode设置为
Asynchronous
Header & Source
oled.c (谨慎展开,很长)
oled.h
font.c (谨慎展开,很长)
font.h
main.cAHT20 I2C读取温湿度数据
设计功能
- 使用硬件I2C读取AHT20温湿度传感器的温度和湿度数据
- 将读取结果发送到串口可视化输出
CubeMX GPIO 设置总览
引脚 | 模式 | 上拉/下拉 | 速率 | 用途 |
PB6 | I2C1 | 外部电阻上拉 | Standard-100 | SCL |
PB7 | I2C1 | 外部电阻上拉 | Standard-100 | SDA |
PA9 | USART1_TX | ㅤ | ㅤ | TX |
PA10 | USART1_RX | ㅤ | ㅤ | RX |
CubeMX 其他设置
- RCC时钟源 HSE设置为外部晶振
- Clock时钟(HCLK)速度设置为
72MHz
- Connectivity设置I2C1,其他默认
- Connectivity设置串口USART1,Mode设置为
Asynchronous
aht20.c
aht20.h
main.c一些注意事项
- 引入aht20.c、aht20.h文件;
- 设置浮点数打印输出
运行结果

MPU6050 软件I2C读取传感器数据
物料
- STM32F103C8T6开发板
设计功能
- 读取6轴传感器数据,3轴加速度,3轴陀螺仪角度
- 将读取结果发送到串口可视化输出
CubeMX GPIO 设置总览
引脚 | 模式 | 上拉/下拉 | 速率 | 用途 |
PB4 | GPIO_Output | No Pull | High | SCL |
PB5 | GPIO_Output | No Pull | High | SDA |
PA9 | USART1_TX | ㅤ | ㅤ | TX |
PA10 | USART1_RX | ㅤ | ㅤ | RX |
CubeMX 其他设置
- RCC时钟源 HSE设置为外部晶振
- Clock时钟(HCLK)速度设置为
72MHz
- Connectivity设置串口USART1,Mode设置为
Asynchronous
头文件
MPU6050_soft.c
MPU6050_soft.h
主程序
main.c继电器定时控制
物料:
- 继电器×1
- STM32F103C8T6开发板
- 按钮×1
- LED×2(板载)
- 导线若干
设计功能
- 多档切换定时功能,定时开启/关闭继电器
- 按键交互反馈
CubeMX GPIO 设置总览
引脚 | 模式 | 上拉/下拉 | 速率 | 用途 |
PA1 | GPIO_Output | No Pull | Low | LED1(低电平点亮) |
PA7 | GPIO_Output | No Pull | Low | 继电器控制输出 |
PB2 | GPIO_Input | Pull-up | N/A | 按钮输入 |
PB8 | GPIO_Output | No Pull | Low | LED2(低电平点亮) |
main.c图片示例

STM32 脉宽调制 (PWM):控制直流风扇的速度
Code:
- 作者:sleepfat
- 链接:https://blog.sleepfat.top/stm32f103-learning-logs
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章








