阶段学习路径:单片机开发与软件基础
阶段学习路径:单片机开发与软件基础
说明
- 仅作为学习路径参考,鼓励进一步探索和学习
- 以下内容并非绝对按顺序学习,可以按照自己的兴趣灵活调整
- 考虑到任何方向的赛题都离不开单片机系统的开发设计,且硬件与软件存在高度协同的关系,建议硬件方向的同学也可以了解一下相关内容。
- 建议使用STM32F103或STM32F407完成下列内容,在此基础上鼓励使用其他型号的单片机,如TiMSPM0G3507、Raspberry Pi Pico等。
- 强烈建议使用HAL库开发ST系列单片机,如果已经开始学习标准库建议尽快转入HAL库开发(HAL库比标准库真的方便多简单多了,大家用了都说好,转起来也没啥门槛)。有余力可以尝试RTOS实现更好的任务调度。
- 处理好功能代码的封装与解耦合,强烈建议将重复用到的外设驱动或功能模块可以封装成库便于后期使用,能极大的提高开发效率,比赛就四天三夜可没有重复造轮子的时间。
- 完成学习后可以尝试完成一道往年的校赛题目,建议组队完成。
- 在任何地方提问前请阅读群里发的《提问的艺术》,学会提问
- 让我们开始吧
GPIO
这没啥说的,招新题都玩差不多了吧()
时钟树
学习:
HSI、HSE、LSI、LSE、PLL都是啥
SYSCLK HCLK PCLK1/2 AHB APB 都是啥,能干啥
会用CubeMX配置时钟树
实验:
可以尝试将内部时钟信号通过MCO引脚输出,接入示波器观察一下波形。
中断与NVIC
学习:
招新题应该接触过一些了,了解中断相关的理论知识,特别是优先级和回调函数相关内容
实验:
中断常与其他功能和需求一同使用,此处不单独给出实验内容。
定时器TIM
基础定时
学习:
PSC、ARR、CNT,都是啥意思,能干啥,有什么影响
咋更新中断,咋产生event之类的
实验:
1 ms时基产生1 Hz LED翻转(招新题里应该试过了,吧)
PWM输出
学习:
f = CLK / [(PSC+1)(ARR+1)],理解公式
实验:
输出一个舵机控制信号,控制舵机旋转或接入示波器观察信号
输入捕获
学习:
如何配置,CRRx是干啥的,溢出了怎么办
实验:
使用输入捕获测量方波频率,量程尽可能大的情况下分辨率尽可高,注意体会参数对量程和精度的影响
使用输入捕获实现超声波测距
编码器接口
学习:
计数方向的确定,溢出处理,部分信号单片机有专用的QEI端口也可以试试
实验:
旋转编码器调节数据
编码器电机转速rpm计算
ADC
学习:
基础知识:采样精度,转换时间与采样率,转换位数与输出方式,输入范围
触发:软件、TIMx、EXTI
模式:单/扫描/连续/注入
多通道:DMA循环,双ADC同步
实验:
读取电压值,读取传感器数据
采样一个信号,计算相关参数(峰峰值,频率,占空比),识别波形类型(正弦三角方波)
同时采样两个正弦信号,计算相位差
DAC
学习:
注意,部分型号的单片机没有DAC外设,
分辨率,精度,转换时间,输出范围,通道,数据格式,触发方式
实验:
输出0–3.3 V直流电压值
输出正弦波,输出任意周期信号等
I²C
学习:
通讯协议,起始、地址+R/W、ACK、停止、软件IIC实现与硬件IIC实现的区别,相关函数
实验:
驱动SSD1306 OLED(网络上有很多OLED库,挑一个你觉得最好用的,能熟练使用即可,有余力可以研究一下如何写驱动)
读取MPU6050模块的六轴数据
SPI
类似IIC,注意比对与IIC的异同
UART
学习:
波特率、字长、停止位、校验
无/HW,帧协议:头,数据,CRC
TXE、RXNE、空闲中断,DMA
实验:
不同单片机之间的通信(如两块STM32互传数据、STM32与OpenMV/K230传输视觉坐标信息与运动控制信息)
蓝牙模块通信、WIFI模块通信
串口屏显示(非常重要,串口屏还是很方便的使用非常广泛,但如果使用不够熟练导致屏幕掉链子那就是大灾难)
上位机调试
VOFA(电脑端):FireWater浮点帧绘制多通道曲线、FFT运算等
蓝牙控制器(手机端):小车控制,在线调参,无线操作等
也可尝试自行开发上位机软件