V103开发笔记1-20250113

news/2025/2/3 14:48:38 标签: 嵌入式开发, RISCV, CH32V103

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.niftyadmin.cn/n/5840883.html

相关文章

Q#使用教程

Q# 是一种用于量子计算的编程语言,主要用于编写量子算法。 1. 环境配置 安装vscode2017以上 QDK下载地址:Azure Quantum Development Kit (QDK) - Visual Studio Marketplace 将下载好的QDK作为拓展配置到vscode里面。 2.代码 import Microsoft.Qu…

【数据结构】_时间复杂度相关OJ(力扣版)

目录 1. 示例1:消失的数字 思路1:等差求和 思路2:异或运算 思路3:排序+二分查找 2. 示例2:轮转数组 思路1:逐次轮转 思路2:三段逆置(经典解法) 思路3…

基础数据类型之整形

int int是最基础的整形变量,存储的是2*10⁹之间的整数,占用4B的内存 short 和名字一样,更短的整形,可存储10⁴之间的整数,占用2B的内存 long long 和名字一样,更长的整形,可存储9*10⁸之间…

第二篇:多模态技术突破——DeepSeek如何重构AI的感知与认知边界

——从跨模态对齐到因果推理的工程化实践 在AI技术从单一模态向多模态跃迁的关键阶段,DeepSeek通过自研的多模态融合框架,在视觉-语言-语音的联合理解与生成领域实现系统性突破。本文将从技术实现层面,解构其跨模态表征学习、动态融合机制与…

系统URL整合系列视频二(界面原型)

视频 系统URL整合系列视频二(界面原型) 视频介绍 (全国)大型分布式系统Web资源URL整合需求界面原型讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格,控制粒度也越来越细。安全级别提高的同时也增加…

效用曲线的三个实例

效用曲线的三个实例 文章目录 效用曲线的三个实例什么是效用曲线风险与回报:投资决策消费选择:价格与质量的平衡程序员绩效评估:准时与程序正确性 分析- 风险与回报:投资决策分析- 消费选择:价格与质量的平衡- 程序员绩…

深度学习查漏补缺:2. 三个指标和注意力机制

一、bachsize, num_epochs, dataset 在训练卷积神经网络(CNN)或任何其他深度学习模型时,有几个关键参数和概念需要了解:batch size、num epochs 和 dataset。下面是对它们的详细解释: Batch Size(批量大小&…

Java知识速记:栈和堆

Java知识速记:栈和堆 一、什么是栈,什么是堆 栈 栈是一种后进先出(LIFO)的数据结构,用于存储方法调用的本地变量和基本数据类型。在JVM中,每当一个方法被调用时,JVM会为该方法分配一个栈帧&a…