自主学习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.3V
OLED显示屏:
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 接PB6
PWM输出:PB5
实物连接图如下:
3.安装keil5
安装及破解MDK(Keil5)教程 https://blog.csdn.net/weixin_42911200/article/details/81590158
注意要安装Keil.STM32F1xx_DFP.2.3.0.pack支持包,因为我们要用STM32F103C8T6芯片的库函数编写。
库下载地址:https://www.keil.com/dd2/Pack/
博主已上传天翼云盘:https://cloud.189.cn/t/vyUBFzyuMBZr(访问码:6sng)
等待网页加载完,在列表里找到Keil,再找STMicroelectronics STM32F1 Series Device Support, Drivers and
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。
控制无刷电调所用的PWM信号高电平时间也是1ms~2ms,所以我们要实现的PWM信号周期20ms,高电平时间1ms~2ms。
- 我们使用ADC1读取电位器的电压采样值,并从0~4095范围的采样值转换到1000~2000,赋值给PWM输出。
- TIM2定时触发ADC采样,通过DMA传输给变量所在的寄存器,取10次进行均值滤波