当前位置: 首页 > 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和中断的数据交换;

相关文章:

V103开发笔记1-20250113

2025-01-13 一、应用方向分析 应用项目: PCBFLY无人机项目(包括飞控和手持遥控器); 分析移植项目,应用外设资源包括: GPIO, PWM,USART,GPIO模拟I2C/SPI, ADC,DMA,USB等; 二、移植项目的基本…...

在 Spring Boot 项目中,bootstrap.yml 和 application.yml文件区别

在 Spring Boot 项目中,bootstrap.yml 和 application.yml 是两个常用的配置文件,它们的作用和加载顺序有所不同。以下是它们的详细说明: 1. bootstrap.yml 作用: bootstrap.yml 是 Spring Cloud 项目中的配置文件,用于…...

DeepSeek研究员在线爆料:R1训练仅用两到三周,春节期间观察到R1 zero强大进化

内容提要 刚刚我注意到DeepSeek研究员Daya Guo回复了网友有关DeepSeek R1的一些问题,以及接下来的公司的计划,只能说DeepSeek的R1仅仅只是开始,内部研究还在快速推进,DeepSeek 的研究员过年都没歇,一直在爆肝推进研究…...

Java进阶文件输入输出实操(图片拷贝)

Java进阶文件输入输出实操(图片拷贝) 把某个目录下的全部图片,全部拷贝到另外一个目录 package test; import domee.chapter6_7.B; import java.io.*; public class Ex10_10 { public static void main(String[] args) throws IOException { …...

Spring Boot统一异常拦截实践指南

Spring Boot统一异常拦截实践指南 一、为什么需要统一异常处理 在Web应用开发中,异常处理是保证系统健壮性和用户体验的重要环节。传统开发模式中常见的痛点包括: 异常处理逻辑分散在各个Controller中错误响应格式不统一敏感异常信息直接暴露给客户端…...

LLM推理--vLLM解读

主要参考: vLLM核心技术PagedAttention原理 总结一下 vLLM 的要点: Transformer decoder 结构推理时需要一个token一个token生成,且每个token需要跟前序所有内容做注意力计算(包括输入的prompt和该token之前生成的token&#xf…...

vscode软件操作界面UI布局@各个功能区域划分及其名称称呼

文章目录 abstract检查用户界面的主要区域官方文档关于UI的介绍 abstract 检查 Visual Studio Code 用户界面 - Training | Microsoft Learn 本质上,Visual Studio Code 是一个代码编辑器,其用户界面和布局与许多其他代码编辑器相似。 界面左侧是用于访…...

PyQt6/PySide6 的 QTreeView 类

QTreeView 是 PyQt6 或 PySide6 库中用于显示分层数据的控件。它适用于展示树形结构的数据,如文件系统、组织结构等。QTreeView 也是基于模型-视图架构的,通常与 QAbstractItemModel 的子类(如 QStandardItemModel 或自定义模型)一…...

一键开启/关闭deepseek

一键开启/关闭 Deepseek对应下载的模型一键开启 Deepseek,一键关闭Deepseek双击对应的bat,就可以启动https://mbd.pub/o/bread/Z56YmpZvbat 下载:https://mbd.pub/o/bread/Z56YmpZv 可以自己写下来,保存成bat文件,也可…...

单纯接入第三方模型就无需算法备案了么?

随着人工智能技术的快速发展,越来越多的企业开始接入第三方模型以提升自身业务能力。然而,关于算法备案的问题也引发了诸多讨论,尤其是单纯接入第三方模型是否需要备案这一问题,更是让不少企业感到困惑。 一、明确算法备案的主体…...

实现一个 LRU 风格的缓存类

实现一个缓存类 需求描述豆包解决思路:实现代码:优化11. std::list::remove 的时间复杂度问题2. 代码复用优化后的代码优化说明 优化21. 边界条件检查2. 异常处理3. 代码封装性4. 线程安全优化后的代码示例优化说明 DeepSeek(深度思考R1&…...

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下,我们来学习下图的中篇!!! 一、图的遍历 图的遍历指的是遍历图中的顶点,主要有 广度优先遍历 …...

YK人工智能(六)——万字长文学会基于Torch模型网络可视化

1. 可视化网络结构 随着深度神经网络做的的发展,网络的结构越来越复杂,我们也很难确定每一层的输入结构,输出结构以及参数等信息,这样导致我们很难在短时间内完成debug。因此掌握一个可以用来可视化网络结构的工具是十分有必要的…...

使用 Swift 完成FFmpeg音频录制、播放和视频格式转换应用

使用 Swift 构建音频录制、播放和视频格式转换应用 在这篇博客中,我们介绍如何用ffmpeg在swift上实现音频录制、音频播放、通过ffmpeg命令实现视频格式转换 音频录制:通过 AVAudioRecorder 实现音频录制功能。音频播放:通过 AVAudioPlayer …...

Gitea+Gridea 创建个人博客

历史文档存档,该方法目前已经无法使用,部署方法可供参考 Gitea部分 1.关于Gitea Gitea 是一个面向开源及私有软件项目的托管平台,是全球最大的代码托管平台之一。它采用 Git 分布式版本控制系统,为开发者提供了代码托管、版本控…...

【Linux】一文带你入门了解线程和虚拟地址空间中页表映射的秘密(内附手绘底层逻辑图 通俗易懂)

绪论​ 每日激励:“努力去做自己该做的,但是不要期待回报,不是付出了就会有回报的,做了就不要后悔,不做才后悔。—Jack” 绪论​: 本章是LInux中非常重要的线程部分,通过了解线程的基本概念&am…...

js面试some和every的区别

1.基础使用 some和every 都是数组的一个方法let num [1,2,3,4,5,6] let flag1 num.some((item,index,array)> item > 2)let flag2 num.every((item,index, array)> item > 2)1.some 遍历判断中是符合条件的值 一旦找到则不会继续迭代下去 直接返回 2.every 遍历…...

缓存类为啥使用 unordered_map 而不是 map

性能考虑: std::unordered_map 是基于哈希表实现的,而 std::map 是基于红黑树实现的。对于查找操作,std::unordered_map 的平均查找时间复杂度是 O ( 1 ) O(1) O(1),而 std::map 的查找时间复杂度是 O ( l o g n ) O(log n) O(l…...

ollama linux下载

实验室服务器(A6000)执行curl -fsSL https://ollama.com/install.sh | sh太慢了。 而sudo snap install ollama,容易爆cudalibrt.so12无法正常使用的bug。 发现 https://www.modelscope.cn/models/modelscope/ollama-linux 使用modelscope进…...

k8s服务发现有哪些方式?

在 Kubernetes 中,服务发现是指如何让应用程序在集群内互相找到并通信。Kubernetes 提供了多种服务发现的方式,适应不同的使用场景。以下是 Kubernetes 中常见的服务发现方式: 1. 环境变量(Environment Variables) 概…...

Flash Attention与Attention

原始Attention是: Flash Attention: 伪代码:4d(分别代表Q\K\V\O) Flash Attention2优化了...

vue 使用fetch-event-source 处理sse,实现ChatGpt逐字输出效果

1. 安装 npm install microsoft/fetch-event-source 2. 引用 import { fetchEventSource } from "microsoft/fetch-event-source"; 3. 使用 fetchEventSource(/api/chat, { method: POST,headers: {Content-Type: application/json,Accept: */*,Token: this.toke…...

JAVA进阶之线程

为神马有线程?这玩意儿在干嘛??? 回答这个问题,就先要知道一点点计算机的工作方式。 总所周知,计算机有五部分:输入输出、计算器、存储器、控制器。而在计算机内,CPU、内存、I/O之…...

机器学习专业毕设选题推荐合集 人工智能

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…...

C++ 中的 `string` 类型:全面解析与高效操作

C 中的 string 类型:全面解析与高效操作 在 C 中,string 类型是对字符数组的高级封装,它提供了大量内置函数,使得字符串的处理变得更为简便和高效。与 C 风格的字符数组不同,string 类型不仅自动管理内存,…...

go语言中的Stringer的使用

Go 语言中的 Stringer 是一个非常有用的接口,它在标准库的 fmt 包中定义。Stringer 接口允许类型定义它们的字符串表示方式,这在格式化输出时特别有用。让我们深入了解一下: Stringer 接口定义: type Stringer interface {Strin…...

Java入门进阶

文章目录 1、常用API 1.1、Math1.2、System1.3、Object1.4、Arrays1.5、基本类型包装类 1.5.1、基本类型包装类概述1.5.2、Integer1.5.3、int和String相互转换1.5.4、自动装箱和拆箱 1.6、日期类 1.6.1、Date类1.6.2、SimpleDateFormat类 1.6.2.1、格式化(从Date到…...

【大数据技术】搭建完全分布式高可用大数据集群(Scala+Spark)

搭建完全分布式高可用大数据集群(Scala+Spark) scala-2.13.16.tgzspark-3.5.4-bin-without-hadoop.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Spark的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/softwa…...

使用vLLM部署Qwen2.5-VL-7B-Instruct模型的详细指南

使用vLLM部署Qwen2.5-VL-7B-Instruct模型的详细指南 引言环境搭建安装vLLM安装依赖库下载模型启动vLLM服务器总结参考 引言 近年来,随着大规模语言模型(LLM)的快速发展,如何高效地进行模型推理成为了一个热门话题。vLLM作为一个专…...

AWS门店人流量数据分析项目的设计与实现

这是一个AWS的数据分析项目,关于快消公司门店手机各个门店进店人流量和各个产品柜台前逗留时间(利用IoT设备采集)和销售数据之间的统计分析,必须用到但不限于Amazon Kensis Data Stream,Spark Streaming,Sp…...