自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大牛攻城狮的专栏

写点东西,留念青春。

  • 博客(112)
  • 资源 (9)
  • 收藏
  • 关注

原创 针对STM32F4 MCU的延时方法及函数深入探讨

摘要:本文分析了STM32F4嵌入式开发中的两种延时方法及其应用场景。测试表明,对于ms级延时推荐使用操作系统函数osDelay或HAL_Delay;100us以下短延时建议采用__NOP()结合位段IO操作,可实现最高10.484MHz的IO翻转频率;100us-1ms延时可使用delay_us函数。实测发现HAL_GPIO_TogglePin最高翻转频率为1.787MHz,而位段操作可达10.484MHz。

2025-11-25 21:58:43 1149 2

原创 STM32CubeIDE使用PTD01 DAP Debugger配置方法

摘要:本文记录了在STM32CubeIDE中将调试器从ST-Link切换为PTD01 DAP Debugger的配置过程。由于原理图未引出复位线,需修改工程目录下的.cfg文件改用软件复位方式。

2025-11-25 20:05:59 636

原创 Vivado vitis 2023.2搭建hello world工程,并提升系统到最大主频

本文介绍了使用Vivado Vitis 2023.2搭建Zynq-7000开发环境的完整流程。文章重点说明了从Vivado升级到Vitis的版本变化及注意事项,包括工具界面从SDK到Vitis的重大改变。通过xc7z020clg400-2芯片示例,详细演示了创建helloworld工程的步骤:从Vivado生成bit文件、导出硬件描述到Vitis、创建平台组件、直至最终应用编译和串口调试。特别强调了工具链版本一致性要求,并分享了Vitis平台创建不稳定的解决方法。最终实现了系统主频提升至766MHz的目标。

2025-10-25 15:50:46 1077 1

原创 针对stm32f103 MCU的延时方法及函数深入探讨

本文分析了嵌入式开发中两种常见的延时方法:CPU空跑延时和操作系统延时。测试表明,对于72MHz主频的STM32F103,位段操作IO翻转频率可达2.8797MHz,是IO翻转的极限速度;而HAL_GPIO_TogglePin最高翻转速度约562kHz。建议针对不同延时需求采用不同方法:100us以下精确延时使用__NOP()函数配合位段操作,100us-1000us采用delay_us函数,ms级别延时则推荐使用操作系统延时函数或HAL库延时。测试发现delay_us在短延时(小于100us)时误差较大。

2025-10-22 21:01:22 1215

原创 使用stm32cubeide stm32f103 freeRTOS 实现Modbus RTU协议寄存器读写过程详解

本文介绍了基于STM32F103和FreeRTOS实现Modbus RTU协议的设计方案。项目使用STM32CubeIDE开发环境,配置了8MHz外部时钟、调试串口和485通信串口,并采用FreeRTOS实现多任务处理。重点阐述了Modbus RTU协议的03(读取)和06(写入)功能码的实现方法,包括寄存器地址解析、数据读写操作和CRC16校验算法。通过USB转485转换器连接电脑进行测试,验证了协议实现的正确性。该方案适用于STM32与PLC等设备进行少量寄存器数据通信的场景。

2025-10-21 20:53:20 1104

原创 stm32驱动LTC2494详解

本文介绍了STM32驱动LTC2494 ADC芯片的设计方案,并给出工程代码。LTC2494是一款16位高精度ADC,具有16通道输入、可编程增益和集成温度传感器功能。文章详细说明了硬件连接方式,给出了GPIO宏定义和时序控制要点,重点强调了片选信号(CS)拉低后的t1等待时间要求。同时提供了完整的参考代码工程、说明文档和芯片手册,帮助开发者快速实现LTC2494的驱动开发。该方案通过STM32的PB3/PB4/PB5/PG7引脚与ADC芯片进行SPI通信,适用于温度信号采集等应用场景。

2025-10-18 20:44:19 638

原创 解决stm32cubeide工程复制后更改路径导致无法识别问题

在使用STM32CubeIDE时,拷贝工程到其他位置或电脑后常出现工程打不开错误。解决方法:1)右键删除工程;2)重新导入工程目录;3)注意保持IDE版本一致,建议高版本打开低版本工程。该操作可避免工程配置信息丢失的问题。(98字)

2025-10-18 11:30:16 579

原创 使用stm32cubeide stm32f407 lan8720a freertos lwip 实现tcp客户端、服务端及网络数据转串口数据过程详解

项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。记得十年前,刚参加工作那会接触的第一个项目,就是MCU实现网络控制协议,当时lwip也不是很流行呢,网络协议栈只能手撕了,当时硬着头皮写,最多也写到UDP,不过对付当时的项目也够用了。主要是采用静态IP,不开启DHCP,针对电脑进行ping包测试。电脑的的ping包测试。

2025-04-10 17:27:08 1508

原创 使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解

项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。记得十年前,刚参加工作那会接触的第一个项目,就是MCU实现网络控制协议,当时lwip也不是很流行呢,网络协议栈只能手撕了,当时硬着头皮写,最多也写到UDP,不过对付当时的项目也够用了。抽时间,可以把当时手撕UDP的协议拿出来再看看。

2025-04-07 17:28:23 1389

原创 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 1619

原创 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 462

原创 Deepseek到底能不能替换软、硬件工程师?

身边很多同学、朋友每天都被AI焦虑着,本来上个帖子已经说的很清楚了,下了结论,AI无法替代软、硬件工程师。上篇帖子演示了”使用Deepseek完成一个简单嵌入式开发“,并做了分析,帖子地址如下:帖子结尾说了使用Altium Designer工程,最后是生成gerber文件和bom表,使用keil工程,主要是生成hex文件,我下次可以直接试试让DeepSeek直接生成gerber文件和bom表、hex文件,看看DeepSeek如何接招。

2025-03-21 10:40:16 1214

原创 Linux系统下使用的C++类实现对GPIO的读、写操作封装

在实际项目开发中,通常,用户空间GPIO操作可以通过sysfs接口或者较新的gpiod库(libgpiod)来实现。sysfs是比较传统的方法,但可能在较新的内核中被标记为过时,而libgpiod是推荐的新方法。用户可能需要一个封装良好的类,支持这两种方式,或者选择其中一种。不过,考虑到兼容性和广泛使用,可能需要优先使用sysfs,或者根据当前系统环境选择合适的方式。支持多种GPIO编号方案(如BCM编号、物理引脚编号等)实现GPIO组操作(同时控制多个GPIO)添加PWM支持(通过软件模拟)

2025-03-14 10:40:14 730

原创 使用DeepSeek完成一个简单嵌入式开发

一方面,本人在嵌入式软、硬件行业深耕数十年,有丰富的码农经验;一方面,AI越来越强大,回答AI到底能不能替代码农对我来说越来越重要,这里就对该问题做个准确的、有证据的回答。请帮我使用Altium Designer设计原理图、PCB,使用keil完成代码编写;要求:使用stm32F103RCT6为主控芯片,控制3个流水灯的原理图这里需要注意,每次DeepSeek的回答都不太一样。

2025-03-13 17:56:34 7976 11

原创 Linux下C方式操作GPIO

嵌入式编程中对GPIO的读写操作是最常见的应用的了,这里介绍一种C语言方式操作GPIO,涉及代码,以源代码的形式提供,方便快速嵌入实际项目开发;这种操作GPIO的方法类似MCU,实现一行代码拉高、拉低GPIO,直接一行代码实现IO的读写,其实质是封装了/sys/class/gpio的读写。代码实现了GPIO初始化、读、写等操作,针对Linux下操作GPIO提供了一套标准流程,同时可以应用于多种Linux平台,最后以zynq平台做测试,但是该代码不单单应用于zynq,像其他运行Linux的芯片平台,都可以使用

2025-03-11 13:48:23 791

原创 STM32Lx GXHT3x SHT3x iic 驱动开发应用详解

项目开发过程中,采用STM32L151 为主控芯片进行设计,并外接GXHT3x进行温湿度数据采集。这里MCU采用片上IIC与GXHT3x进行数据交互,本文详细记录了开发过程,为今后的项目提供参考,加速项目开发进度。主要相关原理图,这里的关键是MCU片上IIC管脚PB6/PB7最好设计上拉,另外GXTH30的ADDR管脚标志了该器件的地址,这点可以从手册中看到。 时钟方面,使能外部8Mhz时钟,本文对STM32L151 为主控芯片进行设计,并外接GXHT3x驱动开发过程进行详细说明。

2024-10-22 16:59:37 1035

原创 STM32采用内部参考电压Vrefint Channel校准ADC采样数据

项目前期,硬件攻城狮就不断强调,你要用STM32采用内部参考电压Vrefint Channel校准ADC采样数据。项目一直很忙,校准后肯定可以提升精度,但是ADC精度不只是通过这个方式可以提升精度。软件攻城狮就开始给硬件攻城狮上课,嘟嘟嘟。。。。。。。如下文所示,对着硬件攻城狮说,看看,提升ADC精度的关键还是得靠硬件。下面插播ADC精度提升方法:...言归正传,本文还是要详解STM32采用内部参考电压Vrefint Channel校准ADC采样数据,并使用STM32CubeIDE完成了工程搭建测试

2024-10-18 17:23:47 3970

原创 STM32L1x 片上温度传感器采用ADC及工厂校准数据提升测量温度精度

由于项目临时需要温度数据,又不想改动硬件了,反正对温度精度要求不算太高,索性就用MCU片上温度传感器的温度,来替代了。这里自己根据网上帖子做了一些测试用例尝试测温,但是,效果都不理想。发现ST官方提供了一个例程《AN3964应用笔记STM32L1x 温度传感器应用举例》。这个测试例程比较老了,使用固件库开发,对我来说,我用STM32CubeMX或者STM32CubeIDE开发了,都是基于HAL库,所以面临一定的移植工作。本文实现了该应用笔记的解析,同时实现了STM32CubeMX+Keil uVision5

2024-10-17 17:06:15 1636

原创 STM32L151 多通道ADC DMA循环扫描STM32CubeIDE STM32CubeMX参考设计

项目开发过程中,采用STM32L151 芯片进行涉及,其中需要使用其片上ADC进行多路ADC数据采样。这里就记录一下实际这块的开发过程,其中涉及工程代码再项目中实际投产使用。STM32L151 多通道ADC DMA循环扫描STM32CubeIDE STM32CubeMX参考设计。

2024-10-14 15:45:50 1060 3

原创 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 972

原创 详解si5338 si53xx 设计使用及STM32 iic驱动设计

在实际项目中经常使用si5338 si53xx,进行多路时钟的倍频以生成想要的时钟信号,但是针对si5338 si53xx设计使用缺少相关的资料,本文详解si5338 si53xx 设计使用及STM32 iic驱动设计,本文使用工程在项目中得到测试,在多个项目中同时使用。这里做个详解,加速今后的项目开发。本文使用的资源如下图所示ClockBuilderPro_project------------>> 使用ClockBuilder Pro生成的工程,及配置头文件。

2024-09-04 19:14:31 2669

原创 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 803

原创 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 700

原创 AD5270 AD5271 STM32 SPI驱动设计

针对AD5270 进行原理图设计,与MCU采用SPI接口,AD5270(工程代码+说明文档+手册)并给出例程代码,实现电阻值的设定、并读取

2024-08-29 14:11:55 1454

原创 24AA64 24LC64 STM32分层驱动设计

24AA64_24LC64类比AT24C02是嵌入式开发过程中常用存储芯片,这些芯片基本上都是管脚兼容,可以做到PIN2PIN替换,但是硬件替换后了,软件可以正常跑吗?这就对软件设计提出要求。这个问题也是本文探讨的问题之一,并给出工程代码,通过简单修改相关参数可以适配不同的EEPROM。EEPROM存储芯片接口最常用的就是接口的I2C,从软件使用角度进行分析说明。软件设计采用分层理念,保证尽量简洁,方便器件替换后进行更改。同时设计存储结构体变量,针对存储在EEPROM的数据进行封装,方便方便随时添加、删除存

2024-08-27 17:10:48 1473

原创 详细讲解STM32CubeIDE一步一步驱动LCD

有项目使用TFT-LCD屏幕,这里就整理一下资料记录一下使用STM32驱动TFT-LCD的过程。

2024-07-25 16:55:04 959

原创 解决虚拟机Ubuntu IP总是掉的问题

嵌入式开发过程中,需要使用NFS/TFTP等等,虚拟机Ubuntu就需要和板卡进行网络连接,但是我发现虚拟机Ubuntu的IP地址经常动不动就掉线,本文记录解决该问题的一些思路。其实这个问题很简单,我早该想到,但是每次出现掉线的情况,我输入如下指令,就又可以了,所以就得过且过,没有深入细致思考。Ubuntu输入如下IP配置指令,ens33是我虚拟机的网络这个这里,每次使用这条指令可以解决一时的问题,我也没有深入留意。

2024-06-17 09:50:16 923

原创 zynq qspi启动、无SD卡、格式化分区emmc、调试全过程

使用黑金开发板,全部开发流程避开使用SD卡调试,zynq开发过程中很多资料都是基于SD启动。这样就对新板卡调试带来了一定的困难,因为新板卡基本上没有设计SD卡。这里就一步一步实现qspi启动内核,格式化分区emmc,挂载emmc分区文件系统。这里需要综述一下调试思路:第一步:根据原理图搭建最小系统vivado工程,使用SDK对硬件电路进行测试第二步:根据vivado工程的hdf文件,使用petalinux生成设备树文件第三步:调试U-boot,这需要调试U-boot设备树、W25Q256FVEI

2024-06-14 16:38:36 6084

原创 一文精通zynq uartlite的使用

项目实施过程中,采用zynq系列芯片,由于zynq自身PS侧仅仅提供两路串口,无法满足实际需求。这就需要从PL侧扩展出来多路串口出来。网上也有一些针对的使用步骤,但是都不够友好,缺少很多细节上的步骤,很难调试成功。本文详解一下实际实现的步骤,供大家参考学习使用。

2023-12-08 10:30:55 3539 6

原创 NB6L295M STM32 GD32 IO模拟驱动设计

MCU采用GD32,GD32基本上和STM32一样,针对NBL295M的时序操作是完全相同的.软、硬件设计已经再产品设计中实际使用。与MCU管脚连接如下表所示。软件代码采用两级级联的方式。

2023-10-12 16:47:35 1118

原创 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 1124

原创 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 793

原创 图像文件的操作MATLAB基础函数使用

简介:MATLAB中的图像处理工具箱体统了一套全方位的标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。这里仅仅对常用的基础函数做个使用介绍。

2023-09-08 14:58:22 846

原创 MATLAB中M文件编写

所谓M文件就是将处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。然后,由MATLAB系统编译M文件,得出相应的运行结果。M文件有脚本文件和函数文件两种。脚本文件不需要输入参数,也不输出参数,而会按照文件中指定的顺序执行命令序列。函数式M文件比脚本式M文件相对复杂一些,脚本式M文件不需要输入变量,也不一定返回结果,而函数式M文件一般要输入变量,并且有返回结果。避免用户输入较多命令,避免重复输入命令,打开该类M文件,单击运行或者按下F5按键,即可运行该类文件。输入如下代码,保存average.m。

2023-09-08 09:34:32 3426

原创 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 1134

原创 MATLAB基础-MAT文件的读写操作

MAT文件是MATLAB格式的双精度二进制数据文件,由MATLAB软件创建,可以使用MATLAB软件再其他计算机上以其他浮点格式读取,同时也可以使用其他软件通过MATLAB的应用程序接口来进行读写操作。如果只是再MATLAB环境中处理数据,使用MAT文件格式是最方便的,这样会避免文件格式转换的带来的复杂操作。其中1处为显示代码,2处为执行保存指令后形成的文件,3为A.mat文件内容。这个比较简单,双击mat文件即可导入,也可以通过指令代码导入。MAT文件的操作比较简单,主要是同通过函数。

2023-09-07 10:36:16 5929

原创 蒙特卡洛方法使用原理解系-单位圆的面积计算

蒙特卡洛也成为统计模拟方法,提出以概率统计理论为指导的一类非常重要的数值计算方法,是指使用随机数(或者更常见的伪随机数)来解决很多计算问题的方法。蒙特卡罗方法的名字来源于摩纳哥的一个城市蒙特卡罗,该城市以赌博业闻名,而蒙特卡罗正是以概率为基础的方法。通过实验的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,将其作为问题的解。这里可以多运行基础,看实验结果,基本上更多次运行,可能看到更准确的结果。使用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。

2023-09-06 14:48:35 663

原创 Text文件在MATLAB中读写示例基础

要将一个数组导出一个有分隔符的ASCII码文件中,可以调用save函数。在调用时,要指定-ASCII参数,也可以调用dlmwrite函数。save函数用起来比较方便,而dlmwrite函数有更大的灵活性。它允许用户把任何一个字符指定为分隔符,也可以通过指定一个值域来导出一个数组的子数组。为了便于和外部程序进行交换,以及查看文件中的数据,也常常采用文本数据格式与外界交换数据。在文本格式中,数据采用ASCII码格式,可以使用字母和数字字符。可以在文本编辑器中查看和编辑ASCII文本数据。测试用用例,如下所示。

2023-09-06 11:38:31 942

原创 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 820

原创 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 1308

STM32CubeIDE使用ADC采用DMA重大BUG,初始化代码中将MX-DMA-Init函数MX-ADC-Init搞反

参考博客:https://blog.csdn.net/li171049/article/details/142880398 这里就出现了问题,具体分析如下,MX_DMA_Init函数首先打开DMA时钟,所以必须在MX_ADC_Init函数之前,所以生成如下代码是错误的,这里只是ADC的DMA存在这个问题,应该其他外设的DMA是不是也有这个问题。  这个问题的核心是在DMA时钟未打开之前,进行了DMA的操作,后续的现象的ADC采样数据都是错误的,基本上全是0。 这个问题前前后后折腾了一个星期,主要是没有怀疑到STM32CubeIDE生成的代码会有问题,看这种现象,生成的代码也是没有问题,就是代码顺序出现了问题,这些细节对用户来说发现出来真累,主要是是心累,要不断的进行自我怀疑。这个做个记录,希望别人遇到这个问题,一下就能解决了。

2024-10-12

详解si5338 si53xx 设计使用及STM32 iic驱动设计全套资料原理图代码使用手册ClockBuilder设计工程

参考博客:https://blog.csdn.net/li171049/article/details/141901399 资源内容含: ClockBuilderPro_project------------>> 使用ClockBuilder Pro生成的工程,及配置头文件 ClockBuilder-Pro-Installer.zip------->>ClockBuilder Pro安装文件 si5338.rar------------------------>>stm32cubeide代码工程 详解si5338 si53xx 设计使用及STM32 iic驱动设计.pdf----->>使用说明文档 在实际项目中经常使用si5338 si53xx,进行多路时钟的倍频以生成想要的时钟信号,但是针对si5338 si53xx设计使用缺少相关的资料,详解si5338 si53xx 设计使用及STM32 iic驱动设计,本文使用工程在项目中得到测试,在多个项目中同时使用。这里做个详解,加速今后的项目开发。

2024-09-04

NB6L295M MCU 设计参考,含工程代码使用说明手册等资料,代码工程在实际项目中多次重复使用,加速NB6L295M 的设计

参考博客:https://blog.csdn.net/li171049/article/details/141816173 NB6L295M MCU 设计参考,含工程代码使用说明手册等资料,代码工程在实际项目中多次重复使用,加速针对NB6L295M 的设计。MCU采用STM32F407搭配NBL295M,实现的时序设计。含原理图,驱动代码设计,stm32cubeIDE工程

2024-09-02

ADS7046(含工程代码、使用手册、datasheet)实际工程中使用代码,正确读取电压值,长期稳定运行采样,可以直接使用

部分内容,参考博客:https://blog.csdn.net/li171049/article/details/141680125 ADS7046(含工程代码、使用手册、datasheet)实际工程中使用代码,含测试记录。软件,主要通过模拟IO实现SPI读取数据,模拟过程参考datasheet时序图,正确读取带你压制,并在工程中长期稳定运行。

2024-08-29

AD5270 AD5271 STM32 SPI驱动设计,针对AD5720原理图设计,与MCU采用SPI接口,工程实现设定数值

参考博客:https://blog.csdn.net/li171049/article/details/141677291 针对AD5270 进行原理图设计,与MCU采用SPI接口,AD5270(工程代码+说明文档+手册)并给出例程代码,实现电阻值的设定、并读取

2024-08-29

24AA64-24LC64 STM32软件采用分层设计思想,方便替换EERPOM,方便随时添加、删除存储变量,含工程代码说明文档

参考博客:https://blog.csdn.net/li171049/article/details/141607403 24AA64_24LC64类比AT24C02是嵌入式开发过程中常用存储芯片,这些芯片基本上都是管脚兼容,可以做到PIN2PIN替换,但是硬件替换后了,软件可以正常跑吗?这就对软件设计提出要求。这个问题也是本文探讨的问题之一,并给出工程代码,通过简单修改相关参数可以适配不同的EEPROM。EEPROM存储芯片接口最常用的就是接口的I2C,从软件使用角度进行分析说明。软件设计采用分层理念,保证尽量简洁,方便器件替换后进行更改。同时设计存储结构体变量,针对存储在EEPROM的数据进行封装,方便方便随时添加、删除存储变量,含工程代码、说明文档、datasheet,方便嵌入到自己的工程中。最后实现简单例程,进行测试。

2024-08-27

详细讲解STM32CubeIDE一步一步驱动LCD,原理图,代码,调试过程,提供驱动芯片为ST7735S

参考文章:https://blog.csdn.net/li171049/article/details/140694372?spm=1001.2014.3001.5502 详细讲解STM32CubeIDE一步一步驱动LCD 有项目使用TFT-LCD屏幕,这里就整理一下资料记录一下使用STM32驱动TFT-LCD的过程。 原理图,其中红框标记的是LCD的外部接口,整理把所有的外部接口都连接出来了。 该屏幕的驱动芯片为ST7735S,ST7735S是一块1.8英寸采用SPI通信的TFT全彩屏,分辨率是128*160,这里采用RGB565 16bit的色块编译模式(RGB565即高五位为Red,第五位为Blue,中间六位为Green,共16位)。 ST7735S支持多种驱动接口方式,如8080、6800、四线或者三线串行协议。根据硬件管教配置的不同,选择不同的接口方式,对应的时序就确定了。

2024-07-25

zynq qspi启动、无SD卡、调试全过程,含vivado工程,使用Uboot源码,使用Kernel源码等调试过程使用资源

参考博客文章:https://blog.csdn.net/li171049/article/details/139683883 全部开发流程避开使用SD卡调试,zynq开发过程中很多资料都是基于SD启动。这样就对新板卡调试带来了一定的困难,因为新板卡基本上没有设计SD卡。这里就一步一步实现qspi启动内核,格式化分区emmc,挂载emmc分区文件系统。 这里需要综述一下调试思路: 第一步:根据原理图搭建最小系统vivado工程,使用SDK对硬件电路进行测试 第二步:根据vivado工程的hdf文件,使用petalinux生成设备树文件 第三步:调试U-boot,这需要调试U-boot设备树、W25Q256FVEI、KSZ9031驱动,tftpboot 指令、bootz指令,NFS挂载文件系统。U-boot调试是重点,能够通过U-boot NFS挂载文件系统,板卡启动后,进行emmc的格式化分区,制作文件系统,再同通过修改环境变量、bootargs设置启动挂载emmc分区。 第四步:调试kernel,配置KSZ9031驱动 第五步:调试kernel用设备树

2024-06-14

zynq使用intc实现大于16路以上uartlite,内涵vivado工程,设备树,详细步骤说明文档

项目实施过程中,采用zynq系列芯片,由于zynq自身PS侧仅仅提供两路串口,无法满足实际需求。这就需要从PL侧扩展出来多路串口出来。如果使用更多了大于16路axi_uartlite IP,PL-PS中断线不够使用如下图所示PL-PS中断线只有16个中断,如果uartlite太多了,就会导致中断不够用。该怎么办呢?本文提出使用intc实现大于16路以上uartlite来解决这个问题。 1.vivado工程 需要注意axi_intc IP核的配置,顶层设计上使用verilog代码,将17路uartlite收发管脚环路 2.设备树 提供自动生成设备树节点,最好根据需求,调整一下串口顺序 3.内核配置 需要对axi_intc 、uartlite进行配置项修改 4.上板调试过程,截图给出实际测试的效果,以及开机启动log,可以比对新设计。

2023-12-12

深入理解zynq uart16550的使用(含vivado工程、设备树、内核配置、步骤文档),PL实现9路uart16550

项目实施过程中,采用zynq系列芯片,由于zynq自身PS侧仅仅提供两路串口,无法满足实际需求。这就需要从PL侧扩展出来多路串口出来。网上也有一些针对的使用步骤,但是都不够友好,缺少很多细节上的步骤,很难调试成功。本文基于vivado工程PL侧实现9路uart16550,实现串口扩展。 1.Xilinx提供了两个常用的AXI接口的串口IP核,uart16550、uartlite,文章对比了两种IP核的优缺点,说明了使用场景。 2.vivado工程PL侧实现9路uart16550,顶层文件中,使用Verilog代码实现串口收发管脚短接 3.自动生成设备树 4.内核配置项的改动,不同版本内核配置项改动不一样,在步骤文档中都有截图说明 5.上板子调试过程,展示了/dev下设备节点,以及环路测试结果 6.提出一些调试过程的注意事项

2023-12-11

《一文精通zynq uartlite的使用》vivado工程,设备树文件,PL使用uartlite例化9路串口,详细步骤文档

vivado工程源文件、设备树源文件,PL使用uartlite例化9路串口,详细步骤文档,调试过程 项目实施过程中,采用zynq系列芯片,由于zynq自身PS侧仅仅提供两路串口,无法满足实际需求。这就需要从PL侧扩展出来多路串口出来。网上也有一些针对的使用步骤,但是都不够友好,缺少很多细节上的步骤,很难调试成功。本资源详解一下实际实现的步骤,供大家参考学习使用。 参考博客:https://blog.csdn.net/li171049/article/details/134871405

2023-12-08

NB6L295M STM32 GD32 IO模拟驱动设计,内含有软件工程代码,实际项目中使用,有参考原理图和实际使用说明

NB6L295M STM32 GD32 IO模拟驱动设计,内含有软件工程代码,实际项目中使用,有参考原理图和实际使用说明 参考博客: https://blog.csdn.net/li171049/article/details/133794250

2023-10-12

ad5665r STM32 GD32 IIC驱动设计,驱动程序在AD公司提供例程上修改得到,IO模拟的方式进行IIC通信

资源包含工程代码以及参考文档,参考博客: https://blog.csdn.net/li171049/article/details/133770831 目录 ad5665r STM32 GD32 IIC驱动设计 1 硬件设计 3 软件设计 5 MCU采用GD32,GD32类似STM32,针对ad566r的时序操作是相同的,IO模拟的方式进行IIC通信 软件工程还移植了FreeRTOS,实现一个闪灯任务,并打开了串口0,用于printf打印输出. 设置电压范围 uint32_t ad5665r_a_value = 0; uint32_t ad5665r_b_value = 0; uint32_t ad5665r_c_value = 0; uint32_t ad5665r_d_value = 0; 取值范围0~65535 根据选择DAC型号不一样,这里取值不一样,我这里是使用16bit 提示一下,该类芯片是一个系列有不同的DAC分辨率,看工程实际使用的型号Quad, 12-/14-/16-Bit nanoDACs

2023-10-11

MAX17058-MAX17059 STM32 iic 驱动设计内含有代码、详细设计过程文档,实际项目中使用代码,稳定可靠

详细可以参考博客 https://blog.csdn.net/li171049/article/details/133741997 目录 1. 简介 3 1.1. 典型用法 4 1.2. 寄存器一览表 4 1.3. 器件地址 4 1.4. IIC时序 5 2. 硬件设计 5 3. 软件设计 5 3.1 管脚定义 5 3.2 管脚初始化 6 4. 调试方法 6 5. 主函数 8 很多攻城狮使用IIC读取读取器件时候,非常喜欢使用IO模拟的方式。对初始化IIC使用管脚的初始化主要有两类 一类:将SDA、SCL初始化为GPIO_Mode_Out_OD(普通开漏输出),后面操作IIC管脚时序的时候,就不需要配置SDA的输入输出模式了。 一类:将SDA、SCL初始化为GPIO_Mode_Out_PP(通用推免输出),后面操作IIC管脚时序的时候,就需要配置SDA的输入输出模式。 这两种方式我都使用过,也都可以使用。这里采用第一类做法

2023-10-10

MATLAB主、子函数的使用举例内含有例程说明

MATLAB主、子函数的使用举例内含有例程说明 目录 MATLAB主、子函数的使用举例 1 简介 4 举例说明 4 测试结果 5 运行结果 5 截图显示 6 简介 再MATLAB编程过程中,使用主、子函数的方式完成代码编写。子函数和主函数在同一个M文件中。M文件对外提供主函数接口,这样处理起来就比较方便。 举例说明 function [avg, med] = newstats(u) % 主函数 % NEWSTATS Find mean and median with internal functions. n = length(u); avg = mean(u, n); med = median(u, n); function a = mean(v, n) % 子函数 % Calculate average. a = sum(v)/n; function m = median(v, n) % 子函数 % Calculate median. w = sort(v); if rem(n, 2) == 1 m = w

2023-09-09

MATLAB编程plot函数用法举例

目录 MATLAB编程plot函数用法举例 1 语法 3 说明 3 示例 4 举例1 5 举例2 6 举例3 7 语法 plot(X,Y) plot(X,Y,LineSpec) plot(X1,Y1,...,Xn,Yn) plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn) plot(Y) plot(Y,LineSpec) plot(tbl,xvar,yvar) plot(tbl,yvar) plot(ax,___) plot(___,Name,Value) p = plot(___) 说明 向量和矩阵数据 示例 plot(X,Y) 创建 Y 中数据对 X 中对应值的二维线图。 要绘制由线段连接的一组坐标,请将 X 和 Y 指定为相同长度的向量。 要在同一组坐标区上绘制多组坐标,请将 X 或 Y 中的至少一个指定为矩阵。 plot(X,Y,LineSpec) 使用指定的线型、标记和颜色创建绘图。

2023-09-09

MATLAB编程和C语言差异举例,举例说明,有示例代码参考

MATLAB编程和C语言差异举例,举例说明,有示例代码参考 目录 MATLAB编程和C语言差异举例 1 简介 3 举例说明 3 实现方法一: 3 实现方法二: 4 测试结果如下所示 4 简介 很多同学应该都是先学习的C语言,再学习的MATLAB,再MATLAB使用过程中,尤其是编程往往采用C语言的思路,会导致MATLAB程序效率低下。这里举例说明,二者编程过程中的细微差异,还是需要自己慢慢体会。 MATLAB主要是矩阵思想和C语言的编程逻辑还是又很大差异的。 举例说明 题目:找到A数组中大于0.6的元素,并替换成1 实现方法一: % 首先创建测试数据: A = randn(1000, 1000); B = A; %方法1 tic [X,Y] = find(A > 0.6); for i = 1:length(X) B(X(i),Y(i)) = 1; end toc 实现方法二: % 首先创建测试数据: B = A; %方法2 tic X = find(A > 0.6); B(X) = 1; toc 测试结果如下所示

2023-09-09

MATLAB保存Figure中画好的图像为jpg格式,提供例程代码

MATLAB保存Figure中画好的图像为jpg格式,提供例程代码 目录 MATLAB保存Figure中画好的图像为jpg格式 1 简介 3 手动存储 3 测试结果 4 编写代码实现自动存储 4 测试结果 5 简介 在MATLAB使用过程中,需要把Figure画好的图像保存为jpg格式,存储到本地硬盘上,如果你存储的图片不是太多,可以通过手动操作存储的方式。但是有时候,我们需要比较多的图片,并且很可能存储完图片后,就关闭了Figure图像。这里就介绍一种采用采用代码存储图像的方法。 手动存储 如下图所示,单击保存,可以选择保存的格式,在保存格式中选择jpg格式即可。 测试结果 编写代码实现自动存储 if ~exist('picture','dir') % 检查是否存在picture目录 mkdir('picture') % 如果不存在,则创建picture目录作为保存路径 end paths=[pwd,'\picture\']; % 完整保存路径 for k=1:3;

2023-09-09

MATLAB图像文件的操作基础函数使用

目录 MATLAB图像文件的操作基础函数使用 1 简介 3 查询图像文件的信息 3 图像文件的读写 4 图像文件的显示 4 图像的格式转换 5 简介 MATLAB中的图像处理工具箱体统了一套全方位的标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。这里仅仅对常用的基础函数做个使用介绍。 查询图像文件的信息 使用如下函数 imfinfo(filename,fmt) 函数imfinfo返回一个结构体的info,其中包括了图像文件的信息,filename是指定图像文件的字符串,fmt是指定图像文件格式的字符串。通过此函数获得的信息与图像文件格式的字符串。通过此函数获得的信息与图像文件的类型有关,但至少包含以下一些内容。 imfinfo >> info = imfinfo('测试图片.jpg')

2023-09-08

MATLAB基础 M文件编写,脚本式M文件 函数式M文件

目录 MATLAB基础 M文件编写 1 简介 3 脚本式M文件 3 函数式M文件 5   简介 所谓M文件就是将处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。然后,由MATLAB系统编译M文件,得出相应的运行结果。M文件具有相当大的可开发性和扩展性。M文件有脚本文件和函数文件两种。脚本文件不需要输入参数,也不输出参数,而会按照文件中指定的顺序执行命令序列。而函数文件则接受其他数据为输入参数,并且可以返回结果。 脚本式M文件 避免用户输入较多命令,避免重复输入命令,打开该类M文件,单击运行或者按下F5按键,即可运行该类文件 函数式M文件 函数式M文件比脚本式M文件相对复杂一些,脚本式M文件不需要输入变量,也不一定返回结果,而函数式M文件一般要输入变量,并且有返回结果。举例使用M文件计算向量的平均值。 输入如下代码,保存average.m

2023-09-07

STM32F4 MCU的延时方法及函数测试工程,针对STM32F4 涉及的长延时、短延时,以及IO翻转使用的位段操作,进行测试实际搭建工程

STM32F4 MCU的延时方法及函数测试工程,针对STM32F4 涉及的长延时、短延时,以及IO翻转使用的位段操作,进行测试实际搭建工程,参考博客: https://blog.csdn.net/li171049/article/details/155244718?spm=1011.2415.3001.5331 针对ms级别的延时使用操作系统的延时函数osDelay或者HAL_Delay,针对100us级别以下的延时,采用__NOP()函数调节,针对100us到1000us可以采用delay_us。测试还发现,针对168MHz主频的stm32f4采用位段方式,IO翻转频率可以高达10.484MHz,(也就是IO模拟clk时钟频率到达的最高频率)这应该是stm32f4 MCU IO翻转频率的极限了。采用HAL_GPIO_TogglePin翻转IO的最高的翻转速度大概1.787MHz。

2025-11-25

Vivado vitis 2023.2搭建hello world工程,并提升系统到最大主频资源含Vivado vitis工程,以及参考文档

Vivado vitis 2023.2搭建hello world工程,并提升系统到最大主频资源含《ds190-Zynq-7000-Overview.pdf》、《ug585-Zynq-7000-TRM.pdf》文档,步骤参考博客: https://blog.csdn.net/li171049/article/details/153876746?spm=1011.2415.3001.5331 项目使用xc7z020clg400-2,最高主频可以到766MHz。Vivado都默认习惯了2018版本,要升级vivado版本,还是有点不适应。Vivado整体版本变化不大,对PL开发来说应该比较轻松,基本上还是那些步骤,升级版本后编译速度更快,用起来更方便,IP核可能bug更少。但是对于PS开发来说,变化就大了,都可能变化的你不会玩了。2018版本是SDK,后续又修改为vitis,vitis也有了大的变化,给人最深的印象是,从刚开始像eclipse,后面又开始像vscode。这些不停的变化,反而给开发者带来了一定的学习时间、学习成本。

2025-10-25

针对stm32f103 MCU的延时方法及函数深入探讨,测试使用工程,具体测试结论参考参考博客内容

针对stm32f103 MCU的延时方法及函数深入探讨,测试使用工程,具体测试结论参考参考博客内容: https://blog.csdn.net/li171049/article/details/153745131?spm=1011.2415.3001.5331 提供延时函数的编写以及使用方法,并给出各种延时函数的测试结果,给出使用建议。 在嵌入式开发过程中延时是很常见的操作。总体上延时方法有两种主要思路,本文分析两种种常见的延时方法,分析利弊,在项目开发中可以参考使用。结论是:针对ms级别的延时使用操作系统的延时函数osDelay或者HAL_Delay,针对100us级别以下的延时,采用__NOP()函数调节,针对100us到1000us可以采用delay_us。测试还发现,针对72MHz主频的stm32f103 采用位段方式,IO翻转频率可以高达2.8797MHz,(也就是IO模拟clk时钟频率到达的最高频率)这应该是stm32f103 MCU IO翻转频率的极限了。采用HAL_GPIO_TogglePin翻转IO的最高的翻转速度大概562kHz。

2025-10-22

使用stm32cubeide stm32f103 freeRTOS 实现Modbus RTU协议寄存器读写过程详解,含说明文档、工程代码,测试记录,加速项目开发

使用stm32cubeide stm32f103 freeRTOS 实现Modbus RTU协议寄存器读写过程详解,含说明文档、工程代码,测试记录,详细参考博客 https://blog.csdn.net/li171049/article/details/153700552?spm=1011.2124.3001.6209 项目需要使用MCU实现Modbus RTU协议与PLC通信,STM32作为从机需要将一些传感器信息上报给PLC,有时也需要STM32作为主机采用Modbus RTU协议获取伺服器或者其他设备的一些状态信息。这些信息不需要很多,很多场景下可能就几个地址的寄存器信息。 主要主要设计使用stm32cubeide stm32f103 freeRTOS 实现Modbus RTU协议对从机寄存器的读写,并给出测试记录。 目录 1前言 1 2详细设计 2 2.1时钟配置 2 2.2调试串口1配置 2 2.3485串口的配置 3 2.4freeRTOS的配置 4 3关键代码 6 3.1Modbus RTU 06功能码处理 6 3.2Modbus RTU 03功能码处理 7 3.3Modbus RTU crc校验函数 8 4测试记录 8

2025-10-21

stm32驱动LTC2494详解,资源提供了STM32驱动LTC2494的详解过程,并给出代码工程,同时提供说明文档,LTC2494的参考手册,加速LTC2494的开发

stm32驱动LTC2494详解,资源提供了STM32驱动LTC2494的详解过程,并给出代码工程,同时提供说明文档,LTC2494的参考手册,加速LTC2494的开发。详细内容参考如下博客: https://blog.csdn.net/li171049/article/details/153530946?spm=1011.2415.3001.5331 实际编程中需要注意的参考时序: 需要注意的是SDO片选拉低后才可以写入数据,也就是片选CS拉低后,需要等待t1时间,这里可以参考具体读取时序,这里参考数据手册 关于硬件连接,其中MCU的PB3/PB4/PB5/PG7分别连接LTC2494芯片的SCLK/SDI/SDO/CS管脚。工程在实际项目中已使用。 LTC2494 是一款采用 Easy Drive 技术的 16 通道 (8 个差分通道)、16 位、无延迟增量累加 ADC。这种已获专利的采样方案通过差分输入电流的自动抵消功能而消除了动态输入电流误差和片内缓冲的缺点。这使得既能够保持出色 DC 准确度,同时又可对大的外部源阻抗和轨至轨输入信号直接进行数字化处理。

2025-10-18

C++实现配置文件读写类,构建configFile类,实现配置文件读写,适合少量配置参数的掉电保存,配置文件默认存储路径"/home/root/config.ini"

C++实现配置文件读写类,构建configFile类,实现配置文件读写,适合少量配置参数的掉电保存,配置文件默认存储路径"/home/root/config.ini" configFile类实现如下函数,针对配置文件实现解析、保存等操作 //解析配置文件 void configFile::parseFile_ConfigFile(char **fileData, int lines, struct ConfigInfo **info) //获得指定配置信息 char* configFile::getInfo_ConfigFile(const char *key, struct ConfigInfo *info,int line) //释放配置文件信息 void configFile::destroInfo_ConfigFile(struct ConfigInfo *info) //加载配置文件 int configFile::loadFile_ConfigFile(const char *filePath, char ***fileData, int *line) //判断当前行是否有效 int configFile::isValid_ConfigFile(const char *buf) //初始化配置文件 void configFile::configFileInit(void)

2025-10-12

zynq bram linux驱动,应用程序IOCTL发送指令到驱动,驱动将数据写入到物理地址

zynq bram linux驱动,应用程序IOCTL发送指令到驱动,驱动将数据写入到物理地址,提供makefile

2025-10-02

Linux驱动层操作物理地址程序,采用ioremap实现物理地址读写,与应用层采用字符驱动框架,并通过IO-CTL方式进行交互

Linux驱动层操作物理地址程序,采用ioremap实现物理地址读写,与应用层采用字符驱动框架,并通过IO_CTL方式进行交互。并给出设备树写法做参考,提供makefile等文件。

2025-09-27

si5338-linux-驱动程序含makefile,实现si5338的寄存器参数配置,可以使用ClockBuilder生成头文件,直接替换头文件完成si5338的寄存器配置 也可以将该驱动编译进内核

si5338_linux_驱动程序含makefile,实现si5338的寄存器参数配置,可以使用ClockBuilder生成头文件,直接替换头文件完成si5338的寄存器配置。也可以将该驱动编译进内核实现内核启动过程中配置si5338。驱动使用字符驱动模型,提供/dev/si5338驱动节点,但是未实现读写函数,因为不需要,这里主要是开机时候将配置寄存器内容即register_map.h 给出的信息,通过iic写入到si5338,由于代码大概率会添加到内核,所以针对while(1)都要做超时处理。 register_map.h ------------------->> ClockBuilder生成头文件 si5338.c ------------------->> 驱动文件 该文件使用ClockBuilder生成,基本上将配置信息都给出来了,如下, // Output Frequency (MHz) = 125.000000000 // Mux Selection = IDn // MultiSynth = 20 (20.0000) // R = 1 //Output Clock 1 // Output Frequency (MHz) = 125.000000000 // Mux Selection = IDn // MultiSynth = 20 (20.0000) // R = 1 //Output Clock 2 // Output Frequency (MHz) = 133.333000000 // Mux Selection = IDn // MultiSynth = 18 100006/133333 (18.

2025-09-21

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现tcp client网络数据转串口数据过程详解,含详解文档、工程代码,实现客户端断线重连等功能

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现tcp client网络数据转串口数据过程详解,含详解文档、工程代码,参考博客: https://blog.csdn.net/li171049/article/details/147123466?spm=1011.2415.3001.5331 目录 1前言 1 2硬件设计 2 3软件设计 2 3.1时钟配置 3 3.2总体配置 3 3.3Phy的复位管教 4 3.4ETH的配置 5 3.5freeRTOS的配置 5 3.6Lwip的配置 6 4关键代码 6 4.1Phy开机复位 6 4.2tcp客户端初始化 6 4.3tcp服务端初始化 9 5测试记录 9 5.1电脑IP配置 9 5.2ping包测试 10 5.3网络调试助手模拟tcp服务端,STM32为tcp客户端 10 5.4网络调试助手模拟tcp客户端,STM32为tcp服务端 11 项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。 这里尝试使用raw api进行编程,但是测试效果不理想,太差了,不够稳定,很多时候不能建立链接。排查问题后发现,tcp_new();后的网卡地址默认为0,无法和远端地址建立路由关系,Don't even try to send a SYN packet if we have no route since that will fail。就替换为NETCONN API进行tcp客户端设计。 采用NETCONN API实现tcp 客户端,考虑tcp连接的断掉重连,优化设计,实现客户端断弦、断电,开机重连等设计。

2025-04-10

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现tcp server网络数据转串口数据过程详解

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现tcp server网络数据转串口数据过程详解,含详解文档、工程代码,参考博客: https://blog.csdn.net/li171049/article/details/147123466?spm=1011.2415.3001.5331 目录 1前言 1 2硬件设计 2 3软件设计 2 3.1时钟配置 3 3.2总体配置 3 3.3Phy的复位管教 4 3.4ETH的配置 5 3.5freeRTOS的配置 5 3.6Lwip的配置 6 4关键代码 6 4.1Phy开机复位 6 4.2tcp客户端初始化 6 4.3tcp服务端初始化 9 5测试记录 9 5.1电脑IP配置 9 5.2ping包测试 10 5.3网络调试助手模拟tcp服务端,STM32为tcp客户端 10 5.4网络调试助手模拟tcp客户端,STM32为tcp服务端 11 项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。

2025-04-10

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp server网络数据转串口数据过程详解,含详解步骤、代码工程

参考详解文档如下博客: https://blog.csdn.net/li171049/article/details/147047195 针对udp server测试记录,STM32工程中使用UDP server绑定1400端口号进行数据监听,收到数据后,将数据原路返回发送,同时通过串口打印接收到的数据。 1前言 1 2硬件设计 2 3软件设计 2 3.1时钟配置 3 3.2总体配置 3 3.3Phy的复位管教 4 3.4ETH的配置 5 3.5freeRTOS的配置 5 3.6Lwip的配置 6 4关键代码 7 4.1Phy开机复位 7 4.2UDP初始化 7 5测试记录 7 5.1电脑IP配置 7 5.2ping包测试 8 5.3udp server测试记录 8 项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。记得十年前,刚参加工作那会接触的第一个项目,就是MCU实现网络控制协议,当时lwip也不是很流行呢,网络协议栈只能手撕了,当时硬着头皮写,最多也写到UDP,不过对付当时的项目也够用了。抽时间,可以把当时手撕UDP的协议拿出来再看看。技术都是不断的更新迭代,十年后,现在stm32cubeide、stm32cubemx等软件都集成了lwip,这让开发更快速、便捷。但是作为过来人建议,初学者,最好刚开始还是使用固件库、lwip的源码移植,这样对系统理解的更深刻,毕竟网络协议栈真是一门大学问。

2025-04-08

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解,资源含详解文档、代码工程

参考详解文档如下博客: https://blog.csdn.net/li171049/article/details/147047195 使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解,资源含详解文档、代码工程 目录 1前言 1 2硬件设计 2 3软件设计 2 3.1时钟配置 3 3.2总体配置 3 3.3Phy的复位管教 4 3.4ETH的配置 5 3.5freeRTOS的配置 5 3.6Lwip的配置 6 4关键代码 7 4.1Phy开机复位 7 4.2UDP初始化 7 5测试记录 7 5.1电脑IP配置 7 5.2ping包测试 8 5.3网络调试助手接收、发送udp数据 8 5.4串口工具接收网口数据 9 项目需要使用MCU实现网络功能,后续确定方案stm32f407 外接lan8720a实现硬件平台搭建,针对lan8720a也是用的比较多的phy,网上比较多的开发板,硬件上都是选用了这个phy,项目周期比较短,选用了这个常用phy。记得十年前,刚参加工作那会接触的第一个项目,就是MCU实现网络控制协议,当时lwip也不是很流行呢,网络协议栈只能手撕了,当时硬着头皮写,最多也写到UDP,不过对付当时的项目也够用了。抽时间,可以把当时手撕UDP的协议拿出来再看看。技术都是不断的更新迭代,十年后,现在stm32cubeide、stm32cubemx等软件都集成了lwip,这让开发更快速、便捷。但是作为过来人建议,初学者,最好刚开始还是使用固件库、lwip的源码移植,这样对系统理解的更深刻,毕竟网络协议栈真是一门大学问。

2025-04-07

TI-BQ34Z100 STM32CubeIDE STM32L151 调试过程,含详细步骤文档、代码工程、测试记录、BQ34Z100手册等相关资料

详细过程参考博客: https://blog.csdn.net/li171049/article/details/146972795?spm=1011.2415.3001.5331 实际项目中使用了BQ32Z100芯片,进行电池电量、电压、电流等参数,BQ34Z100-G1 器件提供多个接口选项, 其中包括一个I2C 从接口、一个 HDQ 从接口、 一个或四个直接 LED接口以及一个警报输出引脚。此外, BQ34Z100-G1 还支持外部端口扩展器, 连接四个以上的 LED。 MCU型号为STM32L151CBTx,采用IO模拟时序匹对IIC接口时序,对BQ32Z100芯片进行读取,该案例时序可以类比TI公司其他I2C接口芯片的读写操作。接下来,就对调试过程进行说明。 使用STM32CubeIDE Version: 1.17.0搭建工程,编写代码,并上板子调试,代码应用于实际项目工程中。 其中数据信息如下表所示,其中temperature表示温度,单位位K,charge_state表示电量百分比,比较重要的参数,full_charge_cap表示电池容量,remain_cap表示剩余电池容量,voltage表示电池电压,current表示电池电流,flag表示电池运行标识。

2025-04-03

linux下C++方式操作GPIO,涉及代码以源代码的形式提供,方便快速嵌入实际项目;这种操作GPIO的方法类似MCU,直接一行代码实现IO的读写,其实质是封装了/sys/class/gpio的读写

参考博客: https://blog.csdn.net/li171049/article/details/146251312 嵌入式编程中对GPIO的读写操作是最常见的应用的了,这里介绍一种C++类操作GPIO的方式,涉及代码,以源代码的形式提供,方便快速嵌入实际项目开发;这种操作GPIO的方法类似MCU,直接一行代码实现IO的读写,其实质是封装了/sys/class/gpio的读写。代码实现了GPIO初始化、读、写等操作,针对Linux下操作GPIO提供了一套标准流程,同时可以应用于多种Linux平台,最后以zynq平台做测试,但是该代码不单单应用于zynq,像其他运行Linux的芯片平台,都可以使用。 1摘要 1 2应用层使用代码介绍 1 2.1初始化GPIO 1 2.2对GPIO的读写操作 2 2.3总结 3 3 Zynq平台测试 3 3.1宏定义说明 3 3.2测试函数 4

2025-03-21

Linux下C方式操作GPIO,例程源代码,实现一行代码拉高、拉低GPIO,直接一行代码实现IO的读写,其实质是封装了/sys/class/gpio的读写,其他运行Linux的芯片平台,都可以使用

参考博客: https://blog.csdn.net/li171049/article/details/146173865 嵌入式编程中对GPIO的读写操作是最常见的应用的了,这里介绍一种C语言方式操作GPIO,涉及代码,以源代码的形式提供,方便快速嵌入实际项目开发;这种操作GPIO的方法类似MCU,实现一行代码拉高、拉低GPIO,直接一行代码实现IO的读写,其实质是封装了/sys/class/gpio的读写。代码实现了GPIO初始化、读、写等操作,针对Linux下操作GPIO提供了一套标准流程,同时可以应用于多种Linux平台,最后以zynq平台做测试,但是该代码不单单应用于zynq,像其他运行Linux的芯片平台,都可以使用。 Linux下C方式操作GPIO 目录 1摘要 1 2应用层使用代码介绍 2 2.1初始化GPIO 2 2.2对GPIO的读写操作 2 2.3总结 2 2.4DEV_GPIO_Mode 2 2.5DEV_Digital_Write 3 3 Zynq平台测试 4 3.1宏定义说明 4 3.2测试结果 5

2025-03-11

STM32Lx GXHT3x SHT3x iic 驱动开发应用详解(含STM32CubeIDE 工程,含详细说明,SHT3x手册

参考博客:https://blog.csdn.net/li171049/article/details/143162556 资源详细记录了,采用STM32L151 为主控芯片进行设计,并外接GXHT3x进行温湿度数据采集,设计思路,注意要点。这里MCU采用片上IIC与GXHT3x进行数据交互,资源详细记录了开发过程,为今后的项目提供参考,加速项目开发进度。 本资源包含STM32CubeIDE 工程,详细说明稳定以及SHT3x手册,加速您的关于GXHT3x、SHT3x的相关开发 资源代码在实际工程中投入使用,有比较好的稳定性,可以为面临同样问题的攻城狮提供参考设计。

2024-10-22

STM32采用内部参考电压Vrefint Channel校准ADC采样数据含:STM32CubeIDE例程RM0038,详解文档

参考博客:https://blog.csdn.net/li171049/article/details/143058165 博客针对提升ADC精度,做了阐述,然后详解了STM32采用内部参考电压Vrefint Channel校准ADC采样数据。 资源提供该博客的STM32CubeIDE例程:主要参考RM0038文档P286页对Temperature sensor and internal reference voltage使用说明,实现内部参考电压Vrefint Channel校准ADC采样数据 资源提供详解文档:阐述STM32的内部参照电压VREFINT和ADCx_IN17相连接,它的作用是相当于一个标准电压测量点,内部参照电压VREFINT只能出现在主ADC1中使用。针对校准电压,翻看了很多资料,网上也有一些帖子,都是这些把校准电压设置了1.2v,这里有问题的。这个校准电压应该从MCU的出厂设置地址中读取。 资源提供RM0038文档,加速面临同样问题小伙伴的开发速度。

2024-10-19

STM32L1x 片上温度传感器采用ADC及工厂校准数据提升测量温度精度,移植固件库代码,同时实现了CubeMX+Keil uV

参考博客:https://blog.csdn.net/li171049/article/details/143023480 资源包含了《AN3964应用笔记STM32L1x 温度传感器应用举例》文档及例程。 官方这个测试例程比较老了,使用固件库开发,项目采用STM32CubeMX或者STM32CubeIDE开发了,都是基于HAL库,所以面临一定的移植工作。 资源实现了该应用笔记的解析,同时实现了STM32CubeMX+Keil uVision5的代码移植。这里提供移植过程中的所有文档,希望加速面临同样问题的小伙伴的开发进度。 资源详解了AN3964,提供原始工程是适配STM32L152,同时采用的固件库,我项目的板子使用的是STM32L151同时也没有LCD,想要测试该例程,需要进行更改。 资源实现了最终使用到项目上还得完成STM32CubeMX+Keil uVision5移植。这里主要难点是对ADC的配置,资源提供相关工程,并给出相关测试数据。

2024-10-17

STM32L151 多通道ADC DMA循环扫描STM32CubeIDE STM32CubeMX参考设计

参考博客:https://blog.csdn.net/li171049/article/details/142920244 简介 项目开发过程中,采用STM32L151 芯片进行涉及,其中需要使用其片上ADC进行多路ADC数据采样。这里就记录一下实际这块的开发过程,其中涉及工程代码再项目中实际投产使用。STM32L151 多通道ADC DMA循环扫描STM32CubeIDE STM32CubeMX参考设计。 设计思路 由于需要采样11路ADC电压,所以采用DMA的方式,并设置ADC循环扫描,来减轻CPU的工作负担。采用STM32CubeIDE、STM32CubeMX+Keil uVision5进行设计验证。 关键问题 刚开始开发采用STM32CubeIDE,由于版本较低,出现了一个比较难搞的问题,后面切换到STM32CubeMX+Keil uVision5进行开发。文中对ContinuousConvMode和SamplingTime参数进行了说明。

2024-10-14

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

TA关注的人

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