STM32F103C8T6制作舵机/电调测试仪详细图文教程 | 定时器触发ADC | DMA传输 | PWM输出
2025-10-28 来源:bilibili
自主学习STM32已有一周,先实现一个小demo,算是给自己一个动力叭,有目标的学习收获会更多。虽然本科也修了嵌入式课程,但那种走马观花式的学习,最后真正得到的知识实在寥寥无几。个人理解,学习STM32不只是学习编程,更多的是学习查资料、查数据手册、软件的使用和调试方法上,真正需要自己从头造的部分不是很多,吸取前人的经验,搬过来取自己所需即可。用农夫山泉的话来说就是,我们不生产代码,我们只是代码的搬运工!
这次主要跟着正点原子的开发资料进行学习,没有使用战舰开发板,而是使用STM32F103C8T6板子。一是避免自己直接把例程的代码烧进开发板,最后啥也没学到,在不同的板子间移植代码过程中,能够掌握理解更多的基础知识和调试经验;二是这个小板子廉价易得,只要十块钱,和大几百的开发板相比,它体积小、资源可观,很适合我的小项目,以后准备用来制作航模遥控器,敬请关注哈~

1.材料清单
1.STM32F103C8T6蓝色开发板*1(黑色板也可以)

2.USB转TTL模块*1

3. ST-LINK V2仿真器下载器*1(调试STM32性价比极高)

4. OLED屏幕(4管脚)*1

5.10k电位器*1(10k以上都可)

6. 杜邦线、面包板、导线、插针若干
2.电路连接

电位器:GND - PA0 - 3.3VOLED显示屏: GND 电源地 VCC 接3.3v电源 SCL 接PB8(SCL) SDA 接PB9(SDA)
ST-LINK V2接法: GND 电源地 3V3 接3.3v SWCLK 接DCLK SWDIO 接DIO串口USB-TTL接法: GND 电源地 3V3 接3.3v TXD 接PB7 RXD 接PB6PWM输出:PB5

实物连接图如下:

3.安装keil5
安装及破解MDK(Keil5)教程 https://blog.csdn.net/weixin_42911200/article/details/81590158
注意要安装Keil.STM32F1xx_DFP.2.3.0.pack支持包,因为我们要用STM32F103C8T6芯片的库函数编写。
4.新建工程
新建keil库函数工程 https://www.cnblogs.com/zeng-1995/p/11308622.html
与链接里面不同的是以下几个设置:

点击图标按钮1,打开Manage Run-Time Environment窗口,Device如下勾选,其他栏与链接中相同;

点击图标按钮2,打开Manage Project Items窗口,Groups和 Files如下设置:


点击图标按钮3,打开Options for Target窗口,点击顶部菜单按钮切换子窗口,依次如下设置:




点击Setting,打开Cortex-M Target Driver Setup窗口,如果SWDIO里面未显示序列号,则电脑需要更新ST-LINK驱动。
解决方法见链接 https://blog.csdn.net/qq_42041980/article/details/92015997


5.程序实现
控制舵机的PWM:周期20ms,高电平时间0.5ms~2.5ms变化,可控制舵机0~180°的角度变化,即每个高电平时间都对应舵机的一个角度。但航模舵面的实际控制中,不可能有180°变化,所以通用的高电平宽度其实是1ms~2ms。
具体可参考https://www.moz8.com/forum.php?mod=viewthread&tid=82875&highlight=%E8%88%B5%E6%9C%BA%E6%B5%8B%E8%AF%95%E4%BB%AA

控制无刷电调所用的PWM信号高电平时间也是1ms~2ms,所以我们要实现的PWM信号周期20ms,高电平时间1ms~2ms。
我们使用ADC1读取电位器的电压采样值,并从0~4095范围的采样值转换到1000~2000,赋值给PWM输出。
TIM2定时触发ADC采样,通过DMA传输给变量所在的寄存器,取10次进行均值滤波,消除抖动。
定时器触发ADC,DMA传输 http://www.openedv.com/forum.php?mod=viewthread&tid=277863&extra=&page=1
定时器TIM触发ADC采样,DMA搬运到内存 https://blog.csdn.net/qq_38410730/article/details/89921413
TIM3定时触发产生PWM信号,预分频72,频率1MHz,周期1us;自动装载值20 000,故PWM周期1us*20 000=20ms。
main.c文件-包含程序说明、主函数
config.c文件-包含TIM/ GPIO/ ADC等初始化函数
config.h-包含函数预定义和全局变量预定义
oled.c-包含各种显示函数和IIC初始化
oled.h-包含函数预定义和OLED显示所需的宏定义
其他代码基本就是正点原子官方的文件了,整个工程文件已上传天翼云盘:
https://cloud.189.cn/t/uYniA3iM3iei(访问码:g914)
6.实现效果
串口调试助手查看串口输出

OLED显示

- STM32F103C8T6开发板+GY521制作无刷四轴飞控详细图文教程
- 基于STM32F103C8T6和L298N电机驱动模块调速实验NO.1
- 使用Makefile在Windows环境下编译STM32F103C8T6标准库工程,脱离Keil的指南
- STM32F103C8T6单片机性能详解
- STM32F103C8T6微控制器详细参数与特性解析
- STM32F103C8T6引脚定义详解
- STM32F103C8T6单片机GPIO输出点亮初灯:HAL库实战入门
- STM32F103C8T6单片机双极性SPWM逆变技术详解(软件篇二)
- 基于STM32F103C8T6单片机的RTC实时时钟原理及配置代码
- 基于STM32的舵机追光系统
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




