当前位置: 首页 > article >正文

V103开发笔记1-20250113

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)

  1. DMA驱动
    9.FREERTOS移植
    任务;
    消息;
    邮箱;
    队列;
    信号量;
    互斥量;
    定时器;
    内存管理;
    事件组;
    软件定时器;
    轮询;

10.USB驱动
11.FREERTOS和中断的数据交换;

ADC驱动
6. 串口驱动(串口2/串口3)

  1. DMA驱动
    9.FREERTOS移植
    任务;
    消息;
    邮箱;
    队列;
    信号量;
    互斥量;
    定时器;
    内存管理;
    事件组;
    软件定时器;
    轮询;

10.USB驱动
11.FREERTOS和中断的数据交换;


http://www.kler.cn/a/526133.html

相关文章:

  • Github 2025-01-25Rust开源项目日报Top10
  • 【PyTorch】6.张量形状操作:在深度学习的 “魔方” 里,玩转张量形状
  • Kubernetes 环境中的自动化运维实战指南
  • 一文讲解Java中的BIO、NIO、AIO之间的区别
  • AI编译器之——为什么大模型需要Relax?
  • 【llm对话系统】大模型 RAG 之回答生成:融合检索信息,生成精准答案
  • 类文件结构
  • Baklib如何提升企业知识管理效率与市场竞争力的五大对比分析
  • FFmpeg rtmp推流直播
  • 道氏理论简介
  • Baklib深入解析企业内容管理与内容中台的本质差异
  • P1044 [NOIP2003 普及组] 栈 C语言
  • Autogen_core: ClosureAgent使用与测试
  • selenium定位网页元素
  • 如何使用深度学习中的 Transformer 算法进行视频目标检测
  • C基础寒假练习(4)
  • 【Rust自学】17.3. 实现面向对象的设计模式
  • MSU:通过图结构增强LLM推理
  • Vue3的el-table-column下拉输入实时查询API数据选择的实现方法
  • 力扣【1049. 最后一块石头的重量 II】Java题解(背包问题)
  • Windows程序设计8:获取文件大小的两种方式
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(一)
  • Oracle Primavera P6 最新版 v24.12 更新 2/2
  • 数据结构 前缀中缀后缀
  • 毕业设计--具有车流量检测功能的智能交通灯设计
  • 【二叉树的深搜】二叉树剪枝