2025-01-13
一、应用方向分析
应用项目: PCBFLY无人机项目(包括飞控和手持遥控器);
分析移植项目,应用外设资源包括: GPIO, PWM,USART,GPIO模拟I2C/SPI, ADC,DMA,USB等;
二、移植项目的基本套路:
1. 熟悉目标机的硬件驱动或者HAL库;对应项目用到的走一遍,
比如GPIO,EXTI,ADC,PWM,DMA,USART,I2C,SPI,USB等;
2. 参考F103版本,逐个实现功能模块;
在HAL层完成驱动开发;
3. 熟悉原有系统的应用架构和流程,建立应用层的逻辑框架;
根据需要,用应用层逻辑进行拼装,调用底层硬件驱动的时候,逐个确认;
三、具体例程上手
0.GPIO例程开始
我自己用到的开发板PB0/1为LED控制引脚(跟最后项目不一样)
可能遇到的问题: 编译的路径MRS在哪儿设置不熟悉 ,项目打开编译会找不到文件。
把SRC文件夹拷出来,然后指定路径,并在设置中把路径包含进来;
熟悉原有例程的时候,需要重新定义公共文件的路径:
通常熟悉一个新的芯片平台准备工作,涉及到多个文档,大致浏览一下,知道什么方面的信息可以在哪个文档查阅到就可以,不用逐页细看。
DS–datasheet
RM–reference manual
SR–software reference manual
UM–user manual
1. PWM驱动移植
先熟悉目标机的PWM工作机制,看手册;
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
关注几个点:
重装模式:增计数,减计数,增减计数;
分频器:分频器的分频倍数;
通道数:一般是4通道(F103和V103一样)
高级技能:DMA,级联,同步…
内部结构三要素:时钟源, 分频器,输入捕获(VF采样,频率测量)/输出比较(PWM输出);
重点关注PWM输出:
关键参数: 重装值确定频率,计数值确定占空比;
模式:1–边沿对齐, 2–中心对齐;
看代码,观察波形:
1)初始化通道,使能时钟;
2)初始化定时器的重装值和计数值,从而确定频率和占空比;
3)使能定时器,启动PWM输出;
参数: arr–重装值, psc–分频器, ccp–捕获比较寄存器;
arr和ccp都是16位,支持到1/65535的分辨率
psc*arr=周期
psc*ccp=高电平时间;
TIM1_PWMOut_Init(100, 36000 - 1, 50);
分频后时钟:72M/36000=2KHz, 周期0.5ms
arr算出来的周期是0.5ms*100=50ms
ccp算出来的占空比是50/100=50%;
注意还是有少许误差;
改变arr值,可以改变频率,改变ccp值可以改变占空比;
TIM1_PWMOut_Init(200, 36000 - 1, 50);
周期100ms,75%的占空比
TIM1_PWMOut_Init(200, 36000 - 1, 150);
周期100ms,25%的占空比
以上都是模式2
模式1对比: 加模式,与上面相反
2. 定时器中断例程
配置定时器、设置中断;
编写中断服务程序;
!!!RISCV的中断处理特殊之处
void TIM3_IRQHandler(void) attribute((interrupt(“WCH-Interrupt-fast”)));
// 不加这一句,会只中断进入一次,这个是riscv的特性,要注意
后续…
2.外部中断
3.时钟中断
4. I2C/SPI外设驱动
5. ADC驱动
6. 串口驱动(串口2/串口3)
- DMA驱动
9.FREERTOS移植
任务;
消息;
邮箱;
队列;
信号量;
互斥量;
定时器;
内存管理;
事件组;
软件定时器;
轮询;
10.USB驱动
11.FREERTOS和中断的数据交换;
ADC驱动
6. 串口驱动(串口2/串口3)
- DMA驱动
9.FREERTOS移植
任务;
消息;
邮箱;
队列;
信号量;
互斥量;
定时器;
内存管理;
事件组;
软件定时器;
轮询;
10.USB驱动
11.FREERTOS和中断的数据交换;