![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32-MCU
文章平均质量分 93
全能骑士涛锅锅
华东理工大学特聘副教授,上海交通大学电子信息与电气工程学院博士、博士后、上海市科委科技专家库入库专家,入选上海市“超级博士后”计划、福布斯30U30精英榜单(工业制造组)。联鲸电子科技(上海)有限公司技术总监。目前共发表学术论文50余篇,其中一作13篇、通讯5篇 (7篇-1区Top期刊,2篇-顶会口头报告)。申请与授权发明专利10项,授权实用新型专利28项。H-Index为21,论文在Google Scholar总被引数超2000次。担任SCI期刊Sensors客座编辑、《无人系统技术》青年编委。主持中国国家自然科学基金青年项目、中国博士后面上基金与上海交大双创专项基金项目。
展开
-
常见信号滤波方法(卡尔曼滤波、滑动平均、异常值剔除)的原理解析与C语言实现
卡尔曼滤波、滑动平均和异常值剔除是信号处理和数据分析中常用的滤波和平滑技术。这些方法旨在从测量或采集的数据中提取有价值的信息,同时减少噪声和不必要的波动。原创 2023-09-05 16:24:26 · 5285 阅读 · 0 评论 -
使用DMA传输实现单片机高效串口转发——以STM32系列为例
STM32的DMA系统是一项强大的功能,允许高效的数据传输,同时减轻了CPU的负担。直接转发模式的核心实现过程为:对于接收数据的DMA通道,将串口的数据寄存器地址设置为源地址,并设置一个内存地址为目标地址。对于发送数据的DMA通道,将之前设置的内存地址设置为源地址,将另一个串口的数据寄存器地址设置为目标地址。中断服务程序处理:在USART1的中断服务程序中,读取接收到的数据,并触发与USART3关联的DMA传输。在USART3的中断服务程序中,读取接收到的数据,并触发与USART1关联的DMA传输。原创 2023-08-06 17:54:51 · 5019 阅读 · 0 评论 -
单片机外部晶振故障后自动切换内部晶振——以STM32为例
时钟信号是单片机的心跳,对嵌入式系统的长期稳定运行有着至关重要的作用。现代单片机的时钟信号一般都支持外部时钟、外部晶体振荡器、内部RC振荡器等形式的输入。外部晶体振荡器(晶振)由于其高精度、高稳定性、低温飘、低成本的特性,广泛应用于各类对通讯、时间、性能要求严格的场合。本文所述的设计方法,能够在外部晶振故障后自动切换到内部晶振,提高系统的可靠性与稳定性。注意,上述示例只在单片机启动时进行时钟源检测,因此,如果是处理运行时的突发时钟故障,需要设计配套的看门狗,在系统陷入异常状态后自动重启系统。原创 2023-08-02 13:17:20 · 4091 阅读 · 0 评论 -
TMC260系列电机驱动芯片应用介绍
TMC260系列电机驱动芯片应用介绍,包括硬件参数介绍、软件开发、硬件电路设计等。原创 2022-10-14 19:07:57 · 1119 阅读 · 0 评论 -
基于单向链表结构的软件虚拟定时器的设计与构建
本文设计的软件虚拟定时器就是基于一个单向链表进行管理的。通过SList_Traversal方法可以遍历链表的节点并执行注册的回调函数。在回调函数中可以实现数据的类型还原、定时器状态更新等一系列的处理。通过SList_PushTail方法实现链表的节点添加(注册新的定时器),通过SList_RemoveNode方法实现链表的节点删除(移除注册的定时器)。具体的实现可以参考软件定时器的源码。...原创 2022-07-30 16:24:56 · 449 阅读 · 0 评论 -
基于VS Code搭建通用ARM微控制器开发平台
基于VS Code搭建通用ARM微控制器开发平台原创 2022-04-12 20:46:14 · 3904 阅读 · 2 评论 -
STM32F103/F407的FreeRTOS移植
STM32F103/F407的FreeRTOS移植版本记录表FreeRTOS简介官方网站FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions源码FreeRTOS_V10.4.1_Source.rar移植步骤(以STM32F103为例)添加FreeRTOS源码至项目文件官网下载源码,并解压。Source文件夹中的原创 2020-12-04 14:55:19 · 1478 阅读 · 0 评论 -
PID算法库
日期作者版本说明2020.10.29TaoV1.0Release as V1.0目录PID算法介绍源码头文件源文件使用指南直接使用声明并定义PID类型数据(或数组)根据需要修改PID参数计算PID输出值间接使用PID算法介绍PID即:Proportional(比例)、Integral(积分)、**Differential(微分)**的缩写。顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应用最为广泛的一种控制算法,该...原创 2020-12-03 14:21:27 · 2140 阅读 · 4 评论 -
STM32开发项目:微秒级的精准延时 - 使用system tick/DWT寄存器/NOP命令
日期作者版本说明2020.10.29TaoV0.0完成主体内容的撰写目录背景源码头文件源文件使用指南背景源码头文件#ifndef __DELAY_H__#define __DELAY_H__ #include "stm32f10x_conf.h"#include "stm32f10x.h"//#define USE_SYS_TICK#define USE_DWT//#define USE_NOP_DELAYvoid delay_in...原创 2020-11-09 14:54:30 · 5086 阅读 · 2 评论 -
FreeMODBUS库的扩展与增强(3)- 组织Modbus的用户业务逻辑
日期作者版本说明2020.11.06TaoV0.0完成主体内容的撰写目录介绍源码头文件源文件使用指南介绍源码需要特别说明的是void User_MB_InitPortParam(uint8_t portNum, uint32_t baudRate, eMBParity parity)函数。此函数并没有真正的配置通讯端口,而是初始化modbus通讯端口参数的几个全局变量。设计这些全局变量的主要原因是,在整个项目工程中还涉及其他地方需要用到这些参数,例如串口的中断服务函...原创 2020-11-06 15:17:00 · 489 阅读 · 0 评论 -
STM32开发项目:STS-31高精度温度传感器的驱动程序
日期作者版本说明2020.11.05TaoV1.01. 完成了主体内容的撰写目录STS-31介绍驱动源码头文件源文件应用指南定义并初始化设备结构体变量配置STS-31芯片读取STS-31温度特别说明STS-31介绍详细参数请查看官方数据手册。驱动源码本驱动是基于软件模拟I2C库设计的,利用了它提供的I2CDevice_Struct数据类型以及I2C通讯所需要的接口。头文件/* * sts31.h * * Created on: Jun 2, 2020...原创 2020-11-05 20:43:48 · 923 阅读 · 0 评论 -
STM32开发项目:STM32F407的BootLoader程序
日期作者版本说明2020.11.03TaoV0.0完成主体内容的撰写目录BootLoader程序介绍源码实现源文件stm32f4_flash.ld使用指南设置用户程序下载位置(stm32f4_flash.ld)修改中断向量表偏移量BootLoader程序介绍BootLoader其实就是一段启动程序,它在芯片启动的时候首先被执行,它可以用来做一些硬件的初始化,当初始化完成之后跳转到对应的应用程序中去。例如,我们可以将Flash分为两个区,一个是启动程序区(0x0800 ...原创 2020-11-03 22:09:12 · 3258 阅读 · 2 评论 -
FreeMODBUS库的扩展与增强(2)- 四种寄存器的数据读写操作
日期作者版本说明2020.11.03TaoV0.0完成主体内容的撰写介绍modbus通讯的核心功能就是四种寄存器的数据读写操作。FreeModbus库提供了四种modbus寄存器的读写接口,但是具体的功能需要根据项目的不同自己实现。本文介绍了一套实现四种modbus寄存器读写操作的函数与方法,在笔者的项目中有着大量的应用和验证。需要说明的是,本套库函数是需要配合移植的FreeModbus库一起使用的。对于保持寄存器,由于需要实现掉电保存数据与上电加载数据,需要与其他的...原创 2020-11-03 21:07:52 · 2077 阅读 · 1 评论 -
STM32开发项目:STM32F103与F407的EEPROM仿真及其应用层扩展
日期作者版本说明2020.10.24TaoV0.0完成主体内容的撰写目录说明EEPROM仿真框架介绍源码STM32F103头文件源文件STM32F407头文件源文件使用指南应用层扩展源码头文件源文件使用指南说明在工业应用中经常使用 EEPROM(电可擦除可编程只读存储器)来存储可更新的数据。EEPROM 是用在复杂系统(例如计算机)和其它电子器件中的一种永久(非易失)存储器存储系统,它可以在电源故障时存储和保留少量数据。由于STM32的单片机支持IAP功能,因此可以...原创 2020-10-24 16:57:36 · 1283 阅读 · 0 评论 -
STM32开发项目:片上ADC的使用介绍与扩展库
目录片上ADC介绍扩展库基于STM32F103头文件源文件基于STM32F407头文件源文件使用指南片上ADC介绍扩展库基于STM32F103头文件源文件基于STM32F407头文件#ifndef __ADC_EXT_H__#define __ADC_EXT_H__ #include "stm32f4xx_conf.h"#include "stm32f4xx.h"#define ADC_CHANNEL_NUM 1#define ADC_DMA_CHANNEL_DEEP原创 2020-10-23 19:56:22 · 2047 阅读 · 1 评论 -
STM32开发项目:硬件外设定时器的配置与使用
以STM32F103为例,对定时器外设做一个简单的介绍。STM32F103内部共有 8 个定时器,分为基本定时器,通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO。原创 2020-10-02 18:41:18 · 3936 阅读 · 0 评论 -
STM32开发项目:一些模拟电子开关的介绍与驱动
日期作者版本说明2020.09.29TaoV1.0撰写了ADG408芯片的简介与驱动目录ADG408/409芯片简介驱动源码头文件源文件使用指南ADG408/409芯片简介ADG408是1P8T模拟电子开关,ADG409是2P4T模拟电子开关,关于他们的详细介绍请看官方数据手册。The ADG408/ADG409 are monolithic CMOS analog multiplexers comprising eight single channels an...原创 2020-09-29 20:38:49 · 5418 阅读 · 2 评论 -
STM32开发项目:ADS1115的驱动与使用
日期作者版本说明2020.09.24TaoV0.0完成主体内容的撰写目录ADS1115介绍驱动源码头文件源文件使用指南基本步骤注意事项ADS1115介绍ADS1115是具有 PGA、振荡器、电压基准、比较器的 16 位、860SPS、4 通道 Δ-Σ ADC,数据通过一个 I2C 兼容型串行接口进行传输。有关它的详细说明可以参考官方数据手册。驱动源码头文件#ifndef __ADS1115_H__#define __ADS1115_H__#include ...原创 2020-09-24 17:04:58 · 12880 阅读 · 31 评论 -
FreeMODBUS库的扩展与增强(1)- 移植到STM32单片机的基本流程
目录特别说明FreeMODBUS简介移植FreeMODBUS的几个关键问题官方源码移植流程特别说明由于本文是笔者关于modbus长期开发经验的总结,因此分了几个阶段完成,中间可能掺杂了英文。由于时间原因,全文也没有统一语言,还请读者谅解。本文介绍的移植方法、功能增强、扩展库都是笔者亲自编写设计并经过大量工程验证的,但其中依然可能存在漏洞与Bug,也不能保证在读者的项目或者平台中能够顺利实施。它山之石,可以攻玉,希望笔者的这篇文章对读者起到参考借鉴的作用。FreeMODBUS简介一般情况下,我们不会从原创 2020-09-24 10:15:42 · 1059 阅读 · 0 评论 -
STM32开发项目:FIFO数据模型库
日期作者版本说明2020.09.21TaoV1.0发布了第一版库函数目录背景说明库源码头文件源文件应用指南背景说明库源码头文件/* * fifo.h * * Created on: 2020年9月18日 * Author: Tao */#ifndef SOURCE_ALWHALESLIB_SYSEXTEND_INC_FIFO_H_#define SOURCE_ALWHALESLIB_SYSEXTEND_INC_FIFO_H_#inc...原创 2020-09-23 15:34:11 · 2159 阅读 · 5 评论 -
STM32开发项目:GPIO的位带操作
目录背景介绍GPIO位带操作的实现使用指南背景介绍位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见。51 单片机中通过关键字 sbit 来实现位定义,STM32-M3, M4内核的单片机中没有这样的关键字,而是通过访问位带别名区来实现位操作。以STM32F407为例,有两个地方实现了位带,一个是 SRAM 区的最低 1MB 空间,另一个是外设区最低 1MB 空间。这两个 1MB 的空间除了可以像正常的 RAM 一样操作外,他们还有自己的位带别名区,位带别名区把这 1MB 的空间的原创 2020-09-13 22:18:38 · 1158 阅读 · 0 评论 -
STM32开发项目:步进电机驱动库
目录项目背景驱动库介绍源码分析头文件源文件应用指南项目背景驱动库介绍源码分析头文件头文件中定义了步进电机结构体类型,它是对步进电机(驱动器)控制的抽象,与平台无关。在代码注释中有对每个成员的描述。特别需要注意的是,void StepMotor_TryMove(StepMotor_Struct* StepMotor_P)是电机运动控制的核心函数,它主要负责实现了电机三种运动模式。需要在定时器的更新中断服务函数中周期性的调用此函数。/* * stepmotor.h * * Created o原创 2020-09-05 17:29:24 · 5011 阅读 · 3 评论 -
STM32开发项目:软件模拟I2C功能
目录背景介绍I2C协议介绍本套库的特点源码实现头文件源文件应用指南背景介绍I2C协议介绍本套库的特点源码实现注意,笔者的源码是基于STM32F103平台运行的,延时函数也是从它处调用。在移植本代码的时候应当注意与平台硬件相关部分(例如void I2C_Virtual_SetSDA_Out())以及延时函数(delay_us())的实现。头文件#ifndef __I2C_H__#define __I2C_H__#include "stm32f10x.h"#include "stm32f1原创 2020-08-28 14:59:10 · 6636 阅读 · 10 评论 -
STM32开发项目:软件虚拟定时器的实现
目录背景软件定时器库特性源码介绍softwaretimer.csoftwaretimer.h使用指南背景在不运行实时操作系统的单片机中,面对一些复杂的项目需求时,仅有的几个硬件定时器显得有些捉襟见肘,这主要体现在两个方面:其一是硬件定时器数量十分有限(一般4~8个);其二是硬件定时器难以直接产生周期很长(秒级)的延时。针对这两个缺陷,笔者编写了一个使用的软件定时器库,通过占用了一个硬件定时器虚拟出大量的软件定时器以供项目工程调用。无数的项目实践证明,本软件定时器库是方便、试用而又可靠的。软件定时器库特原创 2020-08-18 22:18:19 · 2941 阅读 · 0 评论 -
STM32开发项目:使用单个定时器驱动多路模拟PWM输出
目录背景虚拟PWM库特性源码介绍头文件 virtual_pwm.h源文件 vir_pwm.c使用说明背景现在的主流MCU都支持硬件PWM输出,以STM32F103为例,通用定时器可以支持4路占空比可调的PWM输出,高级定时器可以支持4路带互补输出的PWM输出。硬件产生PWM,具有稳定可靠、执行效率高的特点。但是,硬件产生的PWM也有一些限制,例如:1.输出引脚位置固定,PCB连线可能会不方便;2.输出引脚的数量有限,在一些需要多通道输出的应用中(如多路控温)会占用过多定时器。虚拟PWM库特性由于项原创 2020-08-13 17:45:02 · 4223 阅读 · 1 评论 -
STM32开发项目:STM32CubeIDE中如何手动修改MCU的型号
背景介绍笔者在开发的时候,习惯应用自己的一套函数扩展库与工程模板,因此每次开始新的项目开发时,就会将上一个项目工程直接复制一份,在其基础上进行开发。当新项目与原项目的单片机型号不一样的时候,就涉及到如何将工程中的单片机型号的修改过来的问题。本文将以工程中MCU型号从STM32F103C8Tx改为STM32F103VCTx为例,说明一下具体的操作步骤。操作步骤修改工程文件.cproject用文本编辑器(NotePad++)打开.cproject工程文件,采用查找替换的方式,将工程文件中的原单片机型号原创 2020-06-15 22:26:34 · 6663 阅读 · 0 评论 -
STM32开发项目:借助DMA传输高效的使用ADC
目录项目背景DMA简介DMA请求DMA通道DMA仲裁DMA配置从哪里来到哪里去要传多少,单位是什么什么时候传输完成STM32F103的ADC简介代码示例配置GPIO相关变量定义配置ADC配置DMA项目背景笔者在进行不少项目开发时,都遇到了需要多通道多次采样的需求。由于STM32片上12位ADC的精度不少很高,通常需要对每个通道多次采样,然后计算平均值作为采样的结果。如果采用常规的读取ADC数值并计算平均值的方法,会占用大量CPU时间,极大地增加了MCU的负担(如6个通道采样20个数据计算平均值,需要采样原创 2020-05-08 23:36:21 · 2920 阅读 · 3 评论 -
在trueStudio 9.1/9.2中如何修改MCU的型号?
1. 在工程属性中,进入C/C++ Build -> Settings -> Target,选择MCU的型号。2. 在工程属性中,进入C/C++ General -> Paths and Symbols -> Symbols对于C8T6型号:GNU C和S,s,asm中需要宏定义“STM32F10X_MD”和“USE_STDPERIPH_DRIVER”...原创 2020-02-18 15:20:18 · 816 阅读 · 1 评论 -
STM32开发项目:如何从TRUEStudio转移到STM32CubeIDE
STM32开发项目:如何从TRUEStudio转移到STM32CubeIDE以 Ubuntu 18.04 的TRUEStudio(版本号:9.1)转移至macOS STM32CubeIDE(版本号:1.3.0)为例Clean原TrueStudio工程(Project->Clean) 删除原TrueStudio工程的工程文件(.cproject & .project) 将T...原创 2020-05-04 16:49:37 · 2064 阅读 · 1 评论 -
STM32开发项目:硬件SPI的配置与使用
项目背景SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率较高的场合。与I2C通讯不同,应用SPI接口的器件很多都对通讯速率有一定的要求,使用软件模拟SPI通讯有两个主要的缺点:1.增大MCU的负载,尤其是在大量数据高频收发时...原创 2020-05-06 18:25:01 · 15167 阅读 · 6 评论 -
STM32开发项目:定时器预装载寄存器(ARR)
项目背景笔者在进行某项目开发时,需要实时调节定时器的周期,以控制定时器下次更新中断的时间。预装载寄存器自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不...原创 2020-05-06 10:38:19 · 23247 阅读 · 4 评论 -
STM32开发项目:处理串口溢出中断(ORE)
问题表现在MCU系统负载较重、串口收发数据频率很高、多个中断存在(如同时有定时器更新中断、外部中断、DMA中断、串口接收中断)的情况下,容易出现串口溢出错误(ORE)。该错误的主要显现形式是:程序莫名卡死在串口中断之中(串口失去响应)解决方法ORE标志位在USART_SR寄存器,当我们打开串口接收中断时,同时也就打开了ORE中断,串口的overload错误会导致程序反复进入串口中断服务程序。...原创 2020-05-05 22:28:39 · 10495 阅读 · 2 评论 -
STM32开发项目:如何配置GPIO的外部中断
目录如何配置GPIO的外部中断配置RCC时钟GPIO配置EXTI配置NVIC配置中断服务函数 IRQ_Handler如何配置GPIO的外部中断以STM32F103为例,记录配置GPIO外部中断的一般方法与流程。配置RCC时钟RCC时钟配置是STM32MCU顺利运行的必备步骤,笔者使用的参考代码如下:void RCC_Config(){ RCC_DeInit(); //使能HSE,并...原创 2020-05-05 14:28:12 · 3888 阅读 · 0 评论