自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 stm32 单脉冲输出 外部触发+软件触发设置测试(基于cubemx的HAL库)

stm32 单脉冲模式cubemx配置 外部硬件触发和软件触发,基于HAL库

2023-01-10 15:08:39 2455 2

转载 [转]stm32实用篇4: stm32数据类型长度

stm32 数据类型所占字节大小

2022-11-17 10:16:54 668

转载 [转][001] [STM32] 如何下载STM32原厂资料

stm32设计资源

2022-11-16 16:49:45 1184

转载 [转]STM32 --- 使用内部FLASH存储数据

stm32 内部flash 操作

2022-11-16 15:08:10 5816

转载 void HAL_Delay(__IO uint32_t Delay) 函数uwTick定时计数值溢出的问题与linux中时间jiffies先后判断

定时器回绕 溢出问题

2022-08-30 11:05:38 1696

转载 [转]关于计算机如何区分有符号数与无符号数

有符号 无符号数 是定义时的解释方式不同

2022-08-26 10:48:15 1437

转载 [转]求整数中比特为1的二进制位数

二进制数的位1提取识别

2022-08-17 17:16:34 288

转载 [转]C语言 void和void *(无类型指针)

void 指针 c语言

2022-08-17 17:08:21 279

转载 【转载】串口通信数据在多任务系统中的操作总结

串口数据处理方式 收发应答处理

2022-07-30 17:22:53 305

转载 [转]C 位操作 左移32位 错误

左移 位数的考虑 溢出问题

2022-07-23 17:26:36 845

转载 【无标题】

spi软件模拟 通用驱动程序

2022-07-09 20:40:17 764

原创 ICCAVR 设置相关

ICC AVR工程设置

2022-05-07 15:43:34 220

转载 [转]51单片机 主循环和中断共享全局变量的问题

中断 与主程序共享 多字节全局变量 超过总线宽的数据的访问基本是非原子性的

2022-05-02 21:58:26 1392

转载 [转]当主函数与中断函数共享变量问题

当时开发的一个产品,一项功能是在通电后播放40秒的语音.测试时发现,大约通电70-80次就有一次播放时间不够40秒就提前停止。当时以为复位有问题,换了复位片,没好。又先后换了CPU,语音芯片,还有电源,都没有好转。排除了硬件芯片原因导致的此现象.后来又从软件中查找原因。反复查找软件逻辑,也没发现问题。后来偶然发现在主while里增加大量延时后,稳定性提高。几乎不再出现问题。但是我还是觉得不对劲,用了两天时间终于找到了原因。因为这是公司的程序,所以不能贴源码。我把其他程序都略去,只把出错的程序大概写

2022-05-02 21:51:08 1286

转载 [转]lua之字符串模式匹配

lua 字符串操作

2022-04-27 17:38:36 2184

转载 [转]avr单片机proteus仿真学习资源收集

avr单片机proteus仿真学习资源收集1 【案例,资料】本博客的avr proteus仿真系列:http://www.cnblogs.com/proteus/category/333898.html2【案例】深海的小鱼儿博客:http://www.cnblogs.com/xmphoenix/category/278943.html3 【书籍】winavr中文教程:http://www.doc88.com/p-78562622287.html4 【视频】叶大鹏的Atm

2022-04-12 20:21:10 323

转载 [转]Microchip Studio 7.0 下载、安装、编译和仿真教程

一、下载Microchip Studio 7.01、登录网站Smart | Connected | Secure | Microchip Technology,按照下图连接进入Atmel Studio页。搜索Microchip Studio进入如下网页:Microchip Studio for AVR® and SAM Devices | Microchip Technology2、下载的可执行文件二、安装Microchip Studio 7.0执行as-installer-7.0.634

2022-03-30 15:23:08 6428 1

转载 [转]使用ICC AVR过渡到AVR STUDIO

列出ICC AVR 过渡到 AVR STUDIO时要注意的几个问题1.头文件更改ICCAVR使用的是“#include ”AVR STUDIO更改为“#include ”AVR Studio 4 的头文件 “#include ”  对应 AVR Studio 5 的头文件 “#include ”在ICC中使用不同MCU的头文件是不同的,在AVR studio中所有MCU的头文件都用“#include ”2.AVR studio中延时函数可直接使用“#inc

2022-03-30 15:22:19 513

转载 [转]STM32CUBEIDE(MX续)学习笔记(七)——FREERTOS+DMA+队列+循环数组方式进行串口收发

一、收发主要逻辑1、接收:利用DMA和空闲中断一次接收一帧的不定长数据,接收到数据后“暂停”(之后分析为何要暂停而不是停止)DMA,快速利用结构体存储接收到数据的地址和长度,再利用队列能够传递结构体的特点,将所收数据的地址和长度入队,然后打开DMA接收。数据处理任务检测队列状态,只要队列中有有效数据就开始数据处理。2.发送:先将要发送的数据存入循环数组(伪)中,再利用队列将数据的地址和长度入队,利用一个串口输出的守护任务来保证数据传输的完整性,这个守护任务对地址和长度出队并使用DMA传输。二、接收代码

2022-03-29 09:28:55 1282

转载 [转]使用其他定时器作为HAL的基础时钟

在不使用FreeRTOS的时候,SysTick是默认的HAL基础时钟源,但是在SYS模块中,也可以选择其他定时器作为基础时钟源,例如可以选择基础定时器TIM6作为HAL的基础时钟源。图1 选用TIM6作为HAL的基础时钟选择TIM6作为基础时钟源后,TIM6就不能在作为其他用途,在STM32CubeMX中不能再对TIM6做任何设置。在NVIC中,TIM6的中断被自动启用,优先级被设置为最高。可以修改TIM6的中断优先级,但是不能关闭TIM6的中断。同时,SysTick定时器的中断也还是被自动启用的,且

2022-03-24 13:39:37 394

转载 [转]FreeRTOS消息队列、信号量、事件标志组、任务通知

功能及区别列表消息队列(需要传递消息时使用) 在任务与任务间、 中断和任务间传递信息,可以数据传输事件标志组(多个事件同步,不需要传递消息时使用) 实现任务与任务间、 中断和任务间的同步,无数据传输。可实现一对多、多对多的同步, 可选择是 “ 逻辑或 ” 触发还 是 “ 逻辑与 ”触发。即 一 个任务可以等待多个事件的发生。信号量(单个事件同步,不需要传递消息时使用)#二值信号量类似一个标志位。仅”空“(0)和”非空“(1)两种状态#计数信号量用来事件计数和资源管理#互斥信号量(中

2022-02-25 15:17:41 1112

转载 [转]STM32 串口传输处理方式 FreeRTOS+队列+DMA+IDLE (二)

紧接着上一篇文章,如何合理处理多个串口接收大量数据。此种方法,很厉害,很NB,首先,利用DMA 可节省大量CUP资源。其次,利用IDLE空闲中断来接收位置个数的数据。最后利用串口DMA环形数据的偏移量、长度,入队,出队处理数据。保证了任务的流畅处理。串口接收数据:中心思想1、开启DMA 环形接收数据模式。2、触发接收数据中断。3、假如数据有进来,将上面环形数据的偏移量与长度 入队。4、出队函数,处理数据。直接上代码两个任务完成#define MAX_FRAME_DISP_LEN

2022-02-23 10:18:41 1065

转载 [转]一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

文章目录1 前言2 串口有必要使用DMA吗3 实现方式4 STM32串口使用DMA5 串口DMA接收5.1 基本流程5.2 相关配置5.3 接收处理5.3 .1 接收数据大小5.3.2 接收数据偏移地址5.4 应用读取串口数据方法6 串口DMA发送5.1 基本流程5.2 相关配置5.3 发送处理6 串口设备6.1 数据结构6.2 对外接口7 相关文章8 完整源码1 前言直接存储器访问(Direct Memory Access)

2022-02-23 10:07:14 10455 8

转载 [转]stm32使用半满中断实现的高可靠串口数据收发

文章目录写在前面软硬件环境库函数接口初始实现方式第一次优化第二次优化最后的修改收发数据模型结尾写在前面串口在各种项目中可谓是太常用了,它也是搞嵌入式必须弄懂的一个通信协议,最近维护了很久的一个项目,设备内另一模块程序更新后出现了不稳定的情况,现象就是某个功能有时候正常有时候不正常,经排查是通信接口上出现了丢包导致的,通信的接口正是用的串口,然后经过多次优化,解决了问题,以此记录一下优化过程。软硬件环境软件:MDK5、stm32 HAL库硬件:项目上主控芯片为stm32f407

2022-02-23 10:06:13 2989 3

转载 [转]调试技巧——宏定义开关和printf

printf 的宏定义版本前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:#define __DEBUG当需要调试的时候,使用语句:#ifdef __DEBUGpr

2021-12-29 14:53:16 327 1

转载 步进电机的线速度控制

1. 介绍这篇应用笔记描述怎样去实现步进电机的线速度控制,步进电机是一个电磁设备将数字脉冲转换为机械轴转动,使用这种电机有很多优点,例如因为没有电刷与触点存在所以使用跟简单、低成本、高可靠性、低速时转矩大、运动精度高,许多具有步进电机的系统在改变速度的时候需要控制加速度/减速度,这个应用笔记提供一个演示程序,能够控制减速度以及位置和速度这种线性速度控制是基于2005年1月“嵌入式系统编程”提出的一种算法,D. Austin的一篇“实时生成步进电机速度曲线”文章。该算法只使用简单的定点算术运算没有数据表,

2021-10-19 14:46:05 2047

转载 [转]STM32开发项目:STS-31高精度温度传感器的驱动程序

日期作者版本说明2020.11.05TaoV1.01. 完成了主体内容的撰写目录STS-31介绍驱动源码头文件源文件应用指南定义并初始化设备结构体变量配置STS-31芯片读取STS-31温度特别说明STS-31介绍详细参数请查看官方数据手册。驱动源码本驱动是基于软件模拟I2C库设计的,利用了它提供的I2CDevice_Struct数据类型以及I2C通讯所需要的接口。头文件/* * sts31.h * * Created on: Ju

2021-09-29 11:13:17 327

转载 [转]从IIC实测波形入手,搞懂IIC通信

玩单片机的朋友都知道IIC通信这个工具,但好多人只是会用,内部的原理不求甚解,或是想要了解其原理,但却对抽象的时序描述一头雾水。本文将从实测的IIC波形入手,带你看到真实的IIC样子,进而去理解IIC的通信原理。1 IIC基础知识首先复习一下IIC基础知识,这部分看不懂的请先带着疑问,然后我们通过分析IIC的真实波形,这些疑问可能就豁然开朗了~1.1 IIC是什么IIC(Inter Integrated Circuit,集成电路总线)是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制

2021-09-29 10:38:33 1807

转载 步进电机驱动算法——梯形加减速算法

目录步进电机梯形加减速梯形加减速和S型曲线比较如何产生PWM波及TIMx定时器配置梯形加减速算法原理分析1.梯形加减速2.步进电机基础方程3.精确计算步进时间间隔4. 加速度的变化算法实现程序流程图步进电机梯形加减速电机的控制方式一般分为开环控制与闭环控制两种控制方式,其中开环控制原理框图如下:这种种控制方式的特点是:控制简单、实现容易、价格较低,这种开环控制方式,负载位置对控制电路没有反馈。对于步进电机,控制脉冲的输入并不依赖于转子的位置,而是按一

2021-09-25 10:53:21 5722 2

转载 [转]MODBUS协议整理——汇总

1.Modbus简介——来自维基百科Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。Modbus是工业领域通信协议的业界标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因有: 【1】公开发表并且无版税要求【2】相对容易的工业网络部署【3】对供应商来说,修改移动原生的位元或字节没有很多限制图1 modbus结构示意图——来自2.协议整理链接【[功能码简述](http://blog.cs

2021-09-23 11:07:35 304

转载 [转]堆、栈、堆栈的区别(总结)

前言进程中每个线程都有自己的堆栈,这是一段线程创建时保留下的地址区域。我们的“栈内存”即在此。至于“堆”内存,我个人认为在未用new定义时,堆应该就是未“保留”未“提交”的自由空间,new的功能是在这些自由空间中保留(并提交)出一个地址范围栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。在编程中,例如C/C++中,所有的局部变量都是从栈中分配内存空间,实际上也不是什么分配

2021-09-23 09:18:22 128

转载 [转]stm32-以太网

TCP/IP详解1、互联网模型OSI模型和TCP/IP模型可参见:TCP/IP四层模型与OSI参考模型TCP/IP工作原理:TCP/IP详解学习笔记概念:IP:网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址)。现在,通常使用的IP地址是一个32bit的数字,也就是我们常说的IPv4标准,这32bit的数字分成四组,也就是常见的255.255.255.255的样式。IPv4标准上,地址被分为五类,我们常用的是B类地址。具体的分类请参考其他文档。需要注意的是IP地址是网络号+

2021-09-22 14:14:45 438

转载 [转]源码面前没有秘密,推荐 9 个带你阅读源码的开源项目

在文章开始之前,请各位先回忆下在日常开发过程中,都使用或依赖了哪些开源项目?是不是发现,开源项目已经完全融入到日常开发!如今大多数的程序员技术栈和工具箱里,或多或少都有开源项目的身影:大到操作系统、小到精美的图标,优秀的开源项目就像“神器”可以让程序员所向披靡,快刀斩乱麻。但强大的“神器”也带来了一些问题,如果“神器”使用得不熟练或姿势不对,就会出现难以解决的 Bug 和问题,这个时候常见的解决方法:问搜索引擎查文档提 issues如果上面的方法都没能解决,那就只能自食其力阅读源.

2021-09-22 13:50:22 124

转载 [转]ARM Cortex-M设备重启从特定位置运行

在项目开发中,有些设备在接收到相关指令或者遇到某种中断触发后需要重启。如果从程序入口处进行启动,会有一段比较长的时间进行初始化工作,相当浪费时间。重启的位置可以从初始化后的特定位置重新运行,这就需要把当前的程序计数器PC及堆栈SP指针进行备份。下面的程序不涉及到进程堆栈,备份的断点位置是在线程模式下。首先需要声明两个变量:// Global Variables to track test progressunsigned int g_labelBP; //BPunsigned int g_MSP;

2021-09-17 10:50:39 216

转载 [转]STM32定时器中的更新操作与更新事件

我们知道【如果不知道先假设知道】,STM32定时器中的四个带影子特性的寄存器组,每组寄存器分别由 影子寄存器【即实际控制寄存器】和预装寄存器组成。其中,影子寄存器是真正起作用的控制寄存器,用户访问不到它。而预装寄存器是用户访问的为实际影子寄存器准备数据或指令的寄存器。它们分别是:TIMx_PSC 分频寄存器 TIMx_ARR 自动重装载寄存器TIMx_CCR捕捉寄存器 TIMx_RCR 重复计数寄存器[高级定时器有】‍‍其中,ARR、CCR寄存器带预装载使能控制位:TIMx_ARR 带预装载使能控

2021-09-16 10:13:35 3241 1

转载 [转]C语言对传感器对象进行封装(OOP)

C语言对传感器对象进行封装(OOP)原文版本记录表背景介绍C语言不支持OOP(面向对象的编程)。并这不意味着我们就不能对C进行面向对象的开发,只是过程要复杂许多。原来以C++的许多工作,在C语言中需我们手动去完成。面向对象的三大特性:封装、继承、多态为复杂的程序开发带来了很多的便利与灵活性。如果用C语言来实现OOP,关键在于结构体。struct和OOP中的class最大区别为默认的继承访问权限:struct是public的,大家都能看到,class是private的,只有指定的对象看得到。通过为虚函

2021-09-15 13:54:04 281

转载 STM32 基于HAL库的产生指定数量的PWM

测试是基于正点原子STM32精英版,芯片为STM32F103ZET6。原文HAL库配置记得打开TIMER的中断程序 HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_4); //此处一句后可直接进入中断void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) //中断回调{ static uint16_t i = 0; i++; if(i >= 10) /

2021-09-15 11:31:23 905

转载 [转]STM32 HAL库PWM回调函数的特性

HAL_TIM_PWM_PulseFinishedCallback函数这是HAL库中PWM相关中断回调函数。一、用法想要启动这个函数,需在CubeMX上配置好定时器的PWM相关参数,并在NVIC中打开相应定时器的中断,相应的配置就不赘述了。然后在main函数中使用HAL_TIM_PWM_Start_IT开启PWM的初始化。二、HAL_TIM_PWM_PulseFinishedCallback与HAL_TIM_PeriodElapsedCallback的区别Pulsd Finish函数的触发是产生

2021-09-15 11:26:47 696

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除