type
status
date
slug
summary
tags
category
icon
password
🙂
 
 

STM32F103C8T6 引脚图

 
notion image
 
 
 
 

💬c & h

 

软件I²C

 
bsp_myI2C.c
bsp_myI2C.h
 
 

👀环境配置

 
 

串口重定向打印输出

 

Keil5

 
假如使用usart1,在CubeMX生成的usart1.c文件末尾,添加如下内容:(代码太长,已折叠)
 
usart.h文件中,在用户代码的Prototypes的部分添加如下内容:
 
在魔法棒的位置添加文件路径,引入这两个文件
 
这样,直接在main.c中任意位置使用printf即可实现串口重定向!
 
 

CMake + VSCode

 
retarget.c
 
retarget.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 其他设置
  1. RCC时钟源 HSE设置为外部晶振
  1. Clock时钟(HCLK)速度设置为72MHz,ADC 6分频,ADC时钟12MHz
  1. ADC配置为连续采样模式,Continuous Conversion Enable
  1. ADC采样周期设置为71.5 Cycles,避免采样过快造成数据误差
  1. Connectivity设置串口USART1,Mode设置为Asynchronous
  1. 启用TIM3,勾选内部时钟,通道2设置为PWM Generation CH2
  1. 预分配设置72-1(1MHz),自动重装载值20000-1(50Hz)
 
 
main.c
 
 
运行结果
notion image
 
 
 
 

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 其他设置
  1. RCC时钟源 HSE设置为外部晶振
  1. Clock时钟(HCLK)速度设置为72MHz,ADC 6分频,ADC时钟12MHz
  1. ADC配置为连续采样模式,Continuous Conversion Enable
  1. ADC采样周期设置为71.5 Cycles,避免采样过快造成数据误差
  1. Connectivity设置I2C1,快速模式
  1. Connectivity设置串口USART1,Mode设置为Asynchronous
 
 
Header & Source
oled库和font库使用 [SSD1306 I2C 128x32 屏幕显示]
 
main.c
 
 
运行结果
notion image
 
 
 

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 其他设置
  1. RCC时钟源 HSE设置为外部晶振
  1. Clock时钟(HCLK)速度设置为72MHz
  1. Connectivity设置I2C1,快速模式
  1. Connectivity设置串口USART1,Mode设置为Asynchronous
 
 
Header & Source
oled.c (谨慎展开,很长)
oled.h
font.c (谨慎展开,很长)
font.h
 
main.c
 
 
 

AHT20 I2C读取温湿度数据

 
 
 
设计功能
  • 使用硬件I2C读取AHT20温湿度传感器的温度和湿度数据
  • 将读取结果发送到串口可视化输出
 
CubeMX GPIO 设置总览
引脚
模式
上拉/下拉
速率
用途
PB6
I2C1
外部电阻上拉
Standard-100
SCL
PB7
I2C1
外部电阻上拉
Standard-100
SDA
PA9
USART1_TX
TX
PA10
USART1_RX
RX
 
CubeMX 其他设置
  1. RCC时钟源 HSE设置为外部晶振
  1. Clock时钟(HCLK)速度设置为72MHz
  1. Connectivity设置I2C1,其他默认
  1. Connectivity设置串口USART1,Mode设置为Asynchronous
 
 
aht20.c
aht20.h
 
main.c
 
 
一些注意事项
  1. 引入aht20.c、aht20.h文件;
  1. 设置浮点数打印输出
 
运行结果
notion image
 
 
 

MPU6050 软件I2C读取传感器数据

 
 
 
物料
  1. 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 其他设置
  1. RCC时钟源 HSE设置为外部晶振
  1. Clock时钟(HCLK)速度设置为72MHz
  1. Connectivity设置串口USART1,Mode设置为Asynchronous
 
 
头文件
MPU6050_soft.c
MPU6050_soft.h
 
主程序
main.c
 
 
 

继电器定时控制

 
物料:
  1. 继电器×1
  1. STM32F103C8T6开发板
  1. 按钮×1
  1. LED×2(板载)
  1. 导线若干
 
设计功能
  • 多档切换定时功能,定时开启/关闭继电器
  • 按键交互反馈
 
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
 
图片示例
notion image
 
 
 

STM32 脉宽调制 (PWM):控制直流风扇的速度

 
 
Code:
 
 
 
 
BLDC Expansion Board一些Linux疑难杂症
Loading...