
嵌入式系统
文章平均质量分 73
大牛攻城狮
个人简介:专业即嵌入式,从事嵌入式行业工作10年,。擅长解决各种嵌入式控制、通信、应用等各专业问题。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解
项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。记得十年前,刚参加工作那会接触的第一个项目,就是MCU实现网络控制协议,当时lwip也不是很流行呢,网络协议栈只能手撕了,当时硬着头皮写,最多也写到UDP,不过对付当时的项目也够用了。抽时间,可以把当时手撕UDP的协议拿出来再看看。原创 2025-04-07 17:28:23 · 1098 阅读 · 0 评论 -
TI-BQ34Z100 STM32CubeIDE STM32L151 调试过程,含详细步骤文档、代码工程、测试记录、BQ34Z100手册等相关资料
实际项目中使用了BQ32Z100芯片,进行电池电量、电压、电流等参数,BQ34Z100-G1 器件提供多个接口选项, 其中包括一个I2C 从接口、一个 HDQ 从接口、 一个或四个直接 LED接口以及一个警报输出引脚。此外, BQ34Z100-G1 还支持外部端口扩展器, 连接四个以上的 LED。MCU型号为STM32L151CBTx,采用IO模拟时序匹对IIC接口时序,对BQ32Z100芯片进行读取,该案例时序可以类比TI公司其他I2C接口芯片的读写操作。接下来,就对调试过程进行说明。原创 2025-04-03 10:00:36 · 1221 阅读 · 0 评论 -
STM32CubeIDE Timebase Source从SysTick切换到定时器TIMx发生Default_Handler
参与一个项目,遇到Timebase Source从SysTick切换到定时器TIMx发生Default_Handler,向各位求助,之前都是解答别人的疑难杂症,这次抛出这个问题,希望ST的技术支持也能看到,给个思路。硬件上采用st-link v2,使用Serial Wire,连接板卡STM32L151CB,时钟配置使用内部高速时钟倍频到32MHz,使用FreeRTOS,为了避免和FreeRTOS共用时钟,这里切换Timebase Source从SysTick切换到定时器TIMx。原创 2025-04-02 10:32:05 · 358 阅读 · 0 评论 -
Linux系统下使用的C++类实现对GPIO的读、写操作封装
在实际项目开发中,通常,用户空间GPIO操作可以通过sysfs接口或者较新的gpiod库(libgpiod)来实现。sysfs是比较传统的方法,但可能在较新的内核中被标记为过时,而libgpiod是推荐的新方法。用户可能需要一个封装良好的类,支持这两种方式,或者选择其中一种。不过,考虑到兼容性和广泛使用,可能需要优先使用sysfs,或者根据当前系统环境选择合适的方式。支持多种GPIO编号方案(如BCM编号、物理引脚编号等)实现GPIO组操作(同时控制多个GPIO)添加PWM支持(通过软件模拟)原创 2025-03-14 10:40:14 · 594 阅读 · 0 评论 -
STM32Lx GXHT3x SHT3x iic 驱动开发应用详解
项目开发过程中,采用STM32L151 为主控芯片进行设计,并外接GXHT3x进行温湿度数据采集。这里MCU采用片上IIC与GXHT3x进行数据交互,本文详细记录了开发过程,为今后的项目提供参考,加速项目开发进度。主要相关原理图,这里的关键是MCU片上IIC管脚PB6/PB7最好设计上拉,另外GXTH30的ADDR管脚标志了该器件的地址,这点可以从手册中看到。 时钟方面,使能外部8Mhz时钟,本文对STM32L151 为主控芯片进行设计,并外接GXHT3x驱动开发过程进行详细说明。原创 2024-10-22 16:59:37 · 895 阅读 · 0 评论 -
STM32采用内部参考电压Vrefint Channel校准ADC采样数据
项目前期,硬件攻城狮就不断强调,你要用STM32采用内部参考电压Vrefint Channel校准ADC采样数据。项目一直很忙,校准后肯定可以提升精度,但是ADC精度不只是通过这个方式可以提升精度。软件攻城狮就开始给硬件攻城狮上课,嘟嘟嘟。。。。。。。如下文所示,对着硬件攻城狮说,看看,提升ADC精度的关键还是得靠硬件。下面插播ADC精度提升方法:...言归正传,本文还是要详解STM32采用内部参考电压Vrefint Channel校准ADC采样数据,并使用STM32CubeIDE完成了工程搭建测试原创 2024-10-18 17:23:47 · 3271 阅读 · 0 评论 -
STM32L1x 片上温度传感器采用ADC及工厂校准数据提升测量温度精度
由于项目临时需要温度数据,又不想改动硬件了,反正对温度精度要求不算太高,索性就用MCU片上温度传感器的温度,来替代了。这里自己根据网上帖子做了一些测试用例尝试测温,但是,效果都不理想。发现ST官方提供了一个例程《AN3964应用笔记STM32L1x 温度传感器应用举例》。这个测试例程比较老了,使用固件库开发,对我来说,我用STM32CubeMX或者STM32CubeIDE开发了,都是基于HAL库,所以面临一定的移植工作。本文实现了该应用笔记的解析,同时实现了STM32CubeMX+Keil uVision5原创 2024-10-17 17:06:15 · 1454 阅读 · 0 评论 -
STM32L151 多通道ADC DMA循环扫描STM32CubeIDE STM32CubeMX参考设计
项目开发过程中,采用STM32L151 芯片进行涉及,其中需要使用其片上ADC进行多路ADC数据采样。这里就记录一下实际这块的开发过程,其中涉及工程代码再项目中实际投产使用。STM32L151 多通道ADC DMA循环扫描STM32CubeIDE STM32CubeMX参考设计。原创 2024-10-14 15:45:50 · 918 阅读 · 1 评论 -
STM32CubeIDE使用ADC采用DMA重大BUG
大牛攻城狮最近调试STM32L151CBT6。由于项目上使用该款芯片做控制电源使用,其中涉及到多路ADC的数据采样。使用STM32CubeIDE 1.8.0版本详细如下图所示注意这里的使用的软件版本号很关键。这里就出现了问题,具体分析如下,MX_DMA_Init函数首先打开DMA时钟,所以必须在MX_ADC_Init函数之前,所以生成如下代码是错误的,这里只是ADC的DMA存在这个问题,应该其他外设的DMA是不是也有这个问题。原创 2024-10-12 16:11:51 · 834 阅读 · 0 评论 -
详解si5338 si53xx 设计使用及STM32 iic驱动设计
在实际项目中经常使用si5338 si53xx,进行多路时钟的倍频以生成想要的时钟信号,但是针对si5338 si53xx设计使用缺少相关的资料,本文详解si5338 si53xx 设计使用及STM32 iic驱动设计,本文使用工程在项目中得到测试,在多个项目中同时使用。这里做个详解,加速今后的项目开发。本文使用的资源如下图所示ClockBuilderPro_project------------>> 使用ClockBuilder Pro生成的工程,及配置头文件。原创 2024-09-04 19:14:31 · 2157 阅读 · 0 评论 -
NB6L295M MCU 设计参考
2.5V / 3.3V 双通道可编程时钟 / 数据差分 CML 的延迟输出多电平输入,带内部终端;NB6L295M 是一款双通道可编程延迟芯片主要用于 Clock 或 Data 去偏斜和定时调整。NB6L295M 在那两个单独的可变延迟通道 PD0 和 PD1 可以在以下之一中配置两种操作模式,Dual Delay 或 Extended Delay。在 Dual Delay Mode(双延迟模式)中,每个通道都有一个可编程延迟部分,该部分使用门矩阵和多路复用器。每个通道的最小延迟固定为 3.2 ns。原创 2024-09-02 11:53:17 · 676 阅读 · 0 评论 -
AD7046 GD32 SPI驱动设计
AD7046简介:ADS7046 12 位, 3 MSPS, 单端输入, 小型低功耗 SAR ADC。ADS7046 是一款 12 位 3 MSPS SAR ADC, 支持0V到 AVDD 范围内的单端输入, AVDD 的范围为2.35V至 3.6V。该器件支持宽数字电源范围(1.65V 至 3.6V) , 可直接连接到各种主机控制器。ADS7046 的标称 DVDD 范围(1.65V 至 1.95V) 符合JESD8-7A 标准。实际项目采用该代码,换算后电压值的测试结果,如下图。原创 2024-08-29 15:34:52 · 610 阅读 · 0 评论 -
AD5270 AD5271 STM32 SPI驱动设计
针对AD5270 进行原理图设计,与MCU采用SPI接口,AD5270(工程代码+说明文档+手册)并给出例程代码,实现电阻值的设定、并读取原创 2024-08-29 14:11:55 · 1221 阅读 · 0 评论 -
24AA64 24LC64 STM32分层驱动设计
24AA64_24LC64类比AT24C02是嵌入式开发过程中常用存储芯片,这些芯片基本上都是管脚兼容,可以做到PIN2PIN替换,但是硬件替换后了,软件可以正常跑吗?这就对软件设计提出要求。这个问题也是本文探讨的问题之一,并给出工程代码,通过简单修改相关参数可以适配不同的EEPROM。EEPROM存储芯片接口最常用的就是接口的I2C,从软件使用角度进行分析说明。软件设计采用分层理念,保证尽量简洁,方便器件替换后进行更改。同时设计存储结构体变量,针对存储在EEPROM的数据进行封装,方便方便随时添加、删除存原创 2024-08-27 17:10:48 · 1305 阅读 · 0 评论 -
详细讲解STM32CubeIDE一步一步驱动LCD
有项目使用TFT-LCD屏幕,这里就整理一下资料记录一下使用STM32驱动TFT-LCD的过程。原创 2024-07-25 16:55:04 · 786 阅读 · 0 评论 -
解决虚拟机Ubuntu IP总是掉的问题
嵌入式开发过程中,需要使用NFS/TFTP等等,虚拟机Ubuntu就需要和板卡进行网络连接,但是我发现虚拟机Ubuntu的IP地址经常动不动就掉线,本文记录解决该问题的一些思路。其实这个问题很简单,我早该想到,但是每次出现掉线的情况,我输入如下指令,就又可以了,所以就得过且过,没有深入细致思考。Ubuntu输入如下IP配置指令,ens33是我虚拟机的网络这个这里,每次使用这条指令可以解决一时的问题,我也没有深入留意。原创 2024-06-17 09:50:16 · 799 阅读 · 0 评论 -
一文精通zynq uartlite的使用
项目实施过程中,采用zynq系列芯片,由于zynq自身PS侧仅仅提供两路串口,无法满足实际需求。这就需要从PL侧扩展出来多路串口出来。网上也有一些针对的使用步骤,但是都不够友好,缺少很多细节上的步骤,很难调试成功。本文详解一下实际实现的步骤,供大家参考学习使用。原创 2023-12-08 10:30:55 · 3048 阅读 · 2 评论 -
NB6L295M STM32 GD32 IO模拟驱动设计
MCU采用GD32,GD32基本上和STM32一样,针对NBL295M的时序操作是完全相同的.软、硬件设计已经再产品设计中实际使用。与MCU管脚连接如下表所示。软件代码采用两级级联的方式。原创 2023-10-12 16:47:35 · 1077 阅读 · 0 评论 -
ad5665r STM32 GD32 IIC驱动设计
根据选择DAC型号不一样,这里取值不一样,我这里是使用16bit 提示一下,该类芯片是一个系列有不同的DAC分辨率,看工程实际使用的型号Quad, 12-/14-/16-Bit nanoDACs。依据不同的管脚封装的进行地址选择,这里工程中实际使用是14管脚封装,根据iic的时序图,根据时序图确定,IIC地址字节为读写分别0x3F、0x3E。MCU采用GD32,GD32类似STM32,针对ad566r的时序操作是相同的,IO模拟的方式进行IIC通信。驱动程序在AD公司提供例程上修改得到。原创 2023-10-11 15:11:59 · 1036 阅读 · 0 评论 -
MAX17058_MAX17059 STM32 iic 驱动设计
插入电池,IC的去抖初始电压测量,以提高初始SOC估计,让他们在位于系统侧。一类:将SDA、SCL初始化为GPIO_Mode_Out_OD(普通开漏输出),后面操作IIC管脚时序的时候,就不需要配置SDA的输入输出模式了。一类:将SDA、SCL初始化为GPIO_Mode_Out_PP(通用推免输出),后面操作IIC管脚时序的时候,就需要配置SDA的输入输出模式。一般iic调试过程,会去读器件ID/版本号之类的保证和手册上说的值一样,这样我们初步判定IIC时序没有问题,这里我们读取。原创 2023-10-10 11:17:08 · 729 阅读 · 0 评论 -
图像文件的操作MATLAB基础函数使用
简介:MATLAB中的图像处理工具箱体统了一套全方位的标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。这里仅仅对常用的基础函数做个使用介绍。原创 2023-09-08 14:58:22 · 716 阅读 · 0 评论 -
MATLAB中M文件编写
所谓M文件就是将处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。然后,由MATLAB系统编译M文件,得出相应的运行结果。M文件有脚本文件和函数文件两种。脚本文件不需要输入参数,也不输出参数,而会按照文件中指定的顺序执行命令序列。函数式M文件比脚本式M文件相对复杂一些,脚本式M文件不需要输入变量,也不一定返回结果,而函数式M文件一般要输入变量,并且有返回结果。避免用户输入较多命令,避免重复输入命令,打开该类M文件,单击运行或者按下F5按键,即可运行该类文件。输入如下代码,保存average.m。原创 2023-09-08 09:34:32 · 3303 阅读 · 0 评论 -
MATLAB创建avi文件
在MATLAB中,可以将一连串图像另存为一段MATLAB视频,然后通过调用movie函数观看。和其他MATLAB Workspace中的变量一样,可以将MATLAB视频另存为mat文件,但是这个mat文件只有MATLAB词可以打开,播放的了。AVI文件格式在windows或UNIX操作系统下均可播放,需要指出的是同通过调用movie2avi函数,可以将MATLAB电源转化为avi格式。用于avi格式的音频视频文件,返回一个对该文件的描述,只能用于avi格式的音频视频文件。测试用用例,如下所示。原创 2023-09-07 15:45:49 · 1034 阅读 · 0 评论 -
MATLAB基础-MAT文件的读写操作
MAT文件是MATLAB格式的双精度二进制数据文件,由MATLAB软件创建,可以使用MATLAB软件再其他计算机上以其他浮点格式读取,同时也可以使用其他软件通过MATLAB的应用程序接口来进行读写操作。如果只是再MATLAB环境中处理数据,使用MAT文件格式是最方便的,这样会避免文件格式转换的带来的复杂操作。其中1处为显示代码,2处为执行保存指令后形成的文件,3为A.mat文件内容。这个比较简单,双击mat文件即可导入,也可以通过指令代码导入。MAT文件的操作比较简单,主要是同通过函数。原创 2023-09-07 10:36:16 · 5722 阅读 · 0 评论 -
蒙特卡洛方法使用原理解系-单位圆的面积计算
蒙特卡洛也成为统计模拟方法,提出以概率统计理论为指导的一类非常重要的数值计算方法,是指使用随机数(或者更常见的伪随机数)来解决很多计算问题的方法。蒙特卡罗方法的名字来源于摩纳哥的一个城市蒙特卡罗,该城市以赌博业闻名,而蒙特卡罗正是以概率为基础的方法。通过实验的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,将其作为问题的解。这里可以多运行基础,看实验结果,基本上更多次运行,可能看到更准确的结果。使用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。原创 2023-09-06 14:48:35 · 540 阅读 · 0 评论 -
Text文件在MATLAB中读写示例基础
要将一个数组导出一个有分隔符的ASCII码文件中,可以调用save函数。在调用时,要指定-ASCII参数,也可以调用dlmwrite函数。save函数用起来比较方便,而dlmwrite函数有更大的灵活性。它允许用户把任何一个字符指定为分隔符,也可以通过指定一个值域来导出一个数组的子数组。为了便于和外部程序进行交换,以及查看文件中的数据,也常常采用文本数据格式与外界交换数据。在文本格式中,数据采用ASCII码格式,可以使用字母和数字字符。可以在文本编辑器中查看和编辑ASCII文本数据。测试用用例,如下所示。原创 2023-09-06 11:38:31 · 904 阅读 · 0 评论 -
MATLAB中isequal函数转化为C语言
NaN(非数字)、NaT(非时间)、未定义的分类元素和 值被视为与其他元素不相等,彼此之间也不相等。有项目算法使用matlab中isequal函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。如果所有输入是等效的,则 tf = isequal(A1,A2,...,An) 返回逻辑值 1 (true)。即使每个结构体中的字段顺序不同,isequal 也将这些字段视为相同,因为它们的值相等。函数返回逻辑值 0 (false),因为这两个矩阵有些许不同,并非完全相等。原创 2023-08-31 16:04:50 · 717 阅读 · 0 评论 -
MATLAB中mod函数转化为C语言
b = mod(a,m) 返回 a 除以 m 后的余数,其中 a 是被除数,m 是除数。此函数通常称为取模运算,表达式为 b = a - m.*floor(a./m)。mod 函数遵从 mod(a,0) 返回 a 的约定。有项目算法使用matlab中mod函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。计算 23 对 5 取模。原创 2023-08-31 13:43:34 · 1228 阅读 · 0 评论 -
MATLAB中circshift函数转化为C语言
如果p是正数则实现A以行为单位,从上到下的循环移位。如果p是负数则实现从下到上的循环移位。如果p是正数则实现A以列为单位,从左到右的循环移位。如果p是负数则实现从右到左的循环移位。有项目算法使用matlab中circshift函数进行运算,这里需要将转化为C语言,从而模拟算法运行,将算法移植到qt。如果p是正数则实现A从左到右的循环移位。如果p是负数则实现A从右到左的循环移位。实际maltab中使用如下代码所示,其中z为96000x1列向量。原创 2023-08-31 13:23:31 · 1116 阅读 · 0 评论 -
MATLAB中符号变量的使用方法解析
MATLAB中常常使用符号变量,这里定义符号变量的函数是syms使用方法如下syms x y z其中,x、y、z 是符号变量,可以是任意字母、数字或下划线组合而成的字符串。代码以下是一个简单的例子,演示如何使用 syms 函数定义符号变量,并进行符号计算。%定义符号变量syms x y%求解方程disp(sol);%求导disp(df);%积分disp(I);举例2代码例程代码如下syms x;ezplot(y)结果举例3代码例程如下syms a;b=a+a^(-2)原创 2023-08-29 20:48:47 · 2554 阅读 · 0 评论 -
使用MATLAB解算炼油厂的选址
记得有一年的数据建模大赛,试题是炼油厂的选址,最后我们采用MATLAB编写(复制)蒙特卡洛算法,还到了省级一等奖,这里把仅有一些记忆和材料,放到这里来,用来纪念消失的青春。原创 2023-08-29 20:15:14 · 749 阅读 · 0 评论 -
C语言实现基于数组的环形缓冲队列
在C语言编程场景中,常常需要对一段不定长数据进行缓存。这里提出一种基于数组的环形缓冲队列,解决上述场景的问题。如下图所示,首先定义数据长度为buf[8],初始化指针为in/out。这时判断in==out为true,所以表明缓存内没有数据。如果把上述缓冲数组换成二维数组,代码可以编写如下。其中in为缓冲数据的输入指针。out为缓冲数据的输出指针。原创 2023-08-24 15:52:23 · 493 阅读 · 0 评论 -
MATLAB打开excel读取写入操作例程
使用uigetfile函数过滤非xlsx文件,找到需要读取的文件,首先判断文件是否存在,如果文件不存在,程序直接返回,存在记录下文件的路径。原创 2023-08-19 15:01:31 · 1039 阅读 · 0 评论 -
matlab 2016读取mif文件
mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据。生成QuartusII11.0可用的mif文件,有如下几种方式:方法1:利用自带的mif编辑器优点:对于小容量RAM可以快速方便的完成mif文件的编辑工作,不需要第三方软件的编辑;缺点:一旦数据量过大,一个一个的输入会使人崩溃;方法2:利用mif软件来生成无论使用什么编辑器,必须保证mif文件的格式如下:冒号左边是地址,右边是数据;分号结尾;原创 2023-08-15 17:13:36 · 1054 阅读 · 0 评论 -
独立按键检测短按、长按,松手后响应操作
有项目使用独立按键检测,短按、长按。根据使用效果,发现松手后,也就是按键弹起后响应操作比较好操作。记得之前,博主写过一篇关于按键的检测的文章,但是过于复杂了。可能很难懂,这里就简单一点,只处理一个按键。并且这个按键,只检测短按、长按两种状态。原创 2023-06-09 20:15:40 · 3072 阅读 · 0 评论 -
C++/C按照时间命名保存bin文件
在Linux应用编程过程中,使用C++或者C语言保存、读取bin文件是比较常见的需求。这里详细记录一下使用C++保存bin文件,也可以使用C语言实现。原创 2023-06-09 19:49:50 · 1890 阅读 · 2 评论 -
Linux 应用程序信号量使用实战
在项目实施过程中,有个机制需要做两个线程之间的同步。具体需求如下:首先,线程1需要把资源读取到缓存其次,线程2才可以操作这块缓存上述两个动作顺序交替重复。原创 2023-06-09 18:26:03 · 1433 阅读 · 0 评论 -
stc15w404as使用keil做库,提供头文件,供调用
有个项目使用需要使用库,将代码封装起来,仅仅留下调试接口,给用户使用,调试一些参数。这样工程看起来更简单,也方便客户维护。也有一些使用场景,需要把自己的代码封装起来,这个是怕被别人窃取,自己的功夫白费了,也可以提供库的形式。当然也有如下场景当公司或者个人需要提供自己的编写的代码供他人调用时,而你或提供方并不想提供源代码(.c源代码),只想提供头文件.h(在头文件中申明函数)供他人调用,他人在调用时只需要知道调用的函数功能是什么,传递的参数是什么等,无需了解函数是怎样具体实现的。原创 2023-05-28 16:43:02 · 2422 阅读 · 0 评论 -
STM8、STM8S003F3P6 通过ZM470SX-MP模组实现lora通信
现在物联网就是很火,lora是避免不开的,也有个项目采用STM8S003F3P6 使用周立功的lora模组ZM470SX-MP实现lora通信。原创 2023-05-26 16:27:37 · 1690 阅读 · 0 评论 -
STM8、STM8S003F3P6 实现PWM控制电机HAS10227
有个项目需要控制一台风机的转速,使用STM8S003F3P6 输出PWM控制,这里就详细记录一下调试记录。STM8S003F3P6 实现PWM控制电机HAS10227原创 2023-05-26 15:32:28 · 5850 阅读 · 1 评论