自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 软构件16-3个I/O控制4个LED算法

在充电状态下,电压到LED2状态时,LED1常亮,LED2闪烁;(瑕疵:LED1亮度会变化)目前只做到充电到LED1时LED1闪烁,充电到LED2时LED1常亮,LED2闪烁。在充电状态下,电压到LED1状态时,LED1闪烁;充电至LED3、LED4时未实现。

2025-03-07 11:17:15 242

原创 STM32休眠STOP模式问题

因为STOP休眠模式用的是LSI,即32KHZ,主时钟为64MHZ,64分频之后为1MHZ,唤醒之后默认用的还是LSI,时间上差不多扩大了4倍,所以,定时时间为原来的4倍才进入定时。STOP休眠唤醒,每次时间都是定时的4倍才进入休眠?唤醒之后重新初始化系统时钟即可。休眠唤醒系统时钟问题。

2024-12-13 16:24:52 176

原创 MPQ3364调试异常异常问题

2) 接测试板输出PWM1%~14%,拔掉屏幕,FAULT脚不报异常,PWM15%以上,拔掉屏幕,FAULT脚可以报异常。1)把BL PWM接到3.3V(相当于PWM100%),FAULT脚和MCU断开,拔掉屏幕,FAULT 可以报异常。1) 接主机PWM设置亮度值0~5(PWM4%~15%),拔掉屏幕,MPQ3364 FAULT脚无法报异常;MPQ3364_FAULT脚在PWM高频低背光时不报异常,低频时则正常。1) 3364 FAULT脚可以输出异常。MPQ3364_FAULT脚不报异常?

2024-12-13 16:24:23 231

原创 调试 RS232 转 TTL 硬件通信

1. 首先检测数据发送,DB9端是否有数据发出,DB9 端子 2,3 脚 TX、RX 有时候不对。2. DB9端有数据,再排查板子上RS232转TTL 之后的 RX端是否有数据,有数据则代。3. 板子上的 TTL 端 RX没有数据,则有可能是RS232转换这一块电路有问题,电阻虚。应,这个要注意,另外RS232 电平是-15V~-3V 代表 1,3V~15V 代表0;焊、电容虚焊、芯片虚焊、芯片坏掉都有可能,一步步排查。从电脑端发出数据,板子端 TTL 接收不到数据?表电脑发数据板子接收到了;

2024-12-11 13:49:15 243

原创 墨水瓶显示图片颜色反转案例

2.送显像素原始数据时,取反码。结论:两种方法显示效果一样。1. 取模软件,颜色反转;关于墨水瓶显示图片颜色反转:2种方法.

2024-12-11 13:48:40 134

原创 嵌入式软件开发思想-20240215

整理需求,按照业务功能、故障策略等设计流程图,流程图根据软件架构思想来设计,调度-->各模块API-->模块实现流程,每个模块需要什么调用资源,整体需要的资源有一个清晰的认知。根据收集到的客户需求,知道要做一个什么样的产品,实现什么功能逻辑,有一个笼统的认知。根据设计好的架构流程图,逐步实现业务功能、故障策略等逻辑。做任何事情,一段时间之后要形成一个体系,一套规范。2) 形成软件规格书。

2024-12-11 13:46:58 176

原创 液晶屏驱动调试显示异常问题

3.3V驱动信号,5V供电可以正常显示,有时候调驱动程序时,延时怎么调都显示都没反应,这时候要看看供电电源是有问题,按照技术手册给的电压范围,测量一下实际供电电压,因为有些电源芯片实际输出电压有可能偏高,如果电压高于驱动芯片的供电范围有可能会导致显示异常,哪怕电压高0.1V,这时候用直流电源供电看一下,更能比较出问题。有时候软件无论怎么调都不行,要首先去检查电源电路供电是否有问题,用直流电源供电试试看看会不会就正常了,是,就说明电源供电有问题,很多时候就是电源供电的问题。

2024-11-08 13:39:57 297

原创 STM32CubeMX配置-PWM输出

基于STM32G070的通用定时器TIM15,主频64MHZ。二、初始化及设置PWM。

2024-11-08 13:26:05 556

原创 硬件调试-PCBA上电调试异常

举例:NB-IOT温湿度(668)MCU发数据没问题,模组不返回,这种情况我就跑偏了,排查思路不严谨,直接去找模组问题,当然就成玄学问题了;而后直接测试电源供电电压,发现电池出来3.6V没毛病,经过保险丝后变成了2.2V,显然就是保险丝有问题,阻抗太小导致不能激活模组工作,所以,其实问题很简单,就跑思路跑偏。1 不考虑软件问题,首先,硬件异常第一先想到的是电源供电,如果就一个电压就测一下是否正常;如果是有稳压芯片,要测一下稳压前后的电压是否正常,每级供电电路电源是否正常,一般很多问题都是供电出问题。

2024-10-29 09:56:42 350

原创 MODBUS协议理解

标准MODBUS协议轮询地址1~247,MODBUS-RTU设备在工程中级联的设备个数理论上是255个(485通讯),但是也和485芯片的驱动能力有关,一般是32个,驱动能力更强的可接更多最多255个。其中MODBUS-RTU最常用,它是OSI模型的第7层应用层报文(一个报文就是一帧数据)传输协议,是一个请求/应答协议(主—从结构)。MODBUS协议是一个工业上常用的通信协议,包括RTU、ASCII、TCP(组成:从机地址 功能码 数据地址 数据 CRC校验(低位在前)

2024-10-29 09:54:03 387

原创 计量芯片CS5463A调试问题

正确的思路:产生校机失败,首先确定是软件还是硬件问题,软件通过例程判断没问题,然后示波器观察通信脚SPI是否有波形,以及晶振起振否,发现问题一上电CS5463A芯片的INT脚一直是高电平,配置为下拉输入也是高电平,正常工作是低电平,只有异常时才是高电平,由此判断是硬件电路问题。二是PCB板布线导致出问题(特殊情况才会考虑,比如同样的电路只是PCB板布线不同,一个板子没问题,一个板子有问题就有可能是布线)。具体分析:首先CS5463A芯片外围电路没问题,那就只能是电源+5V供电出的问题。

2024-10-22 15:25:27 328

原创 软构件14-环形队列

创建一个环形队列,用于串口数据收发、ADC数据采集处理等。

2024-10-15 17:25:20 179

原创 软构件13-函数指针应用

定义了一个函数指针类型 Func,两个整形参数,无返回值。

2024-10-14 16:40:50 124

原创 算法-电梯调度逻辑

电梯调度算法也是磁盘调度算法,为磁盘读写请求保持一个队列,并且在该队列上执行排序和合并功能。

2024-09-29 17:40:49 505

原创 C#绘制动态曲线

用于实时显示数据动态曲线,比如:SOC。

2024-09-29 17:37:43 1089

原创 架构设计-分层思想(二)

嵌入式软件因为直接驱动硬件,设计架构时,无论多么复杂的产品,首先,第一步要做的就是剥离架构,解耦合,因为硬件都有可能会变化,把硬件完全剥离出去,才能最低限度的去修改软件。首先,站在架构的角度去设计,先画出来一个框架图,反复推敲,就像建筑设计师一样,先有一个抽象的大厦设计图,不断的优化,然后把按照图纸一步步实现,实现的过程无需太多的脑力。软件架构并非一层不变的,随着业务和需求的变化,架构也需要适当的调整,一个好的架构要不断的迭代、优化、重构。软件设计犹如作文,古人作文,讲究立意为先。5.功能分层,单向调度;

2024-09-04 12:46:28 272

原创 嵌入式怎么选行业?

国内2000~2010这十年处于经济飞速发展期,2010~2020年很多细分领域出现了龙头企业,越往后创新行业越来越少,所以,资本对政策是最敏感的,一旦资本全部涌入这个行业,必然会造成大量缺口,薪资也会跟着水涨船高。每个城市都是自己的发展规划,未来5年重点发展什么领域,通过关注一下城市的产业集群,选择这些行业自然发展就不会差到哪去,像深圳的“20+8”产业集群。看新闻联播,政策扶持哪些行业,大力发展哪些行业,那么,这些行业会迅速崛起,比如,近半年新闻联播提的最多的:人工智能、智能网联车、储能、

2024-08-28 20:39:28 342

原创 嵌入式学习路径

这个阶段需要一个大平台,做的产品要有架构设计,在一个稳定的架构下多人协作设计不同的模块和软件层次,如果能参与这样的项目,对于软件编程思想会有一个提升,更多的会运用面向对象的思想去设计,剥离硬件平台的依赖,能够以更低的时间成本切换到不同的硬件平台。开发的产品从一些简单的数据采集类,变成多数据采集,通信,控制逻辑的产品,单片机也51转到STM32,通过STM32开发一些裸机类的产品,这时候的项目难度增加,需要数据处理、通信协议解析及控制逻辑。

2024-08-28 20:37:28 227

原创 打羽毛球让我想通了一些技术问题

学习羽毛球的过程是一个动作一个动作学习,最后连贯起来,形成一套动作,比如杀球,先练好握拍,架拍,引拍,挥拍,下压,重心变换,每一步学会之后,杀球就基本学会了,这就相当于问题分析的过程,产品遇到问题,先拆分成一个一个小问题,针对每个小问题逐个解决,最后问题就迎刃而解了。工作中也是,每个行业都有优秀的,平庸的,垫底的,你遇到的同事都有可能,怎么去和他们打交道,就和打羽毛球配合一样,强强联手不一定能赢,强弱组合也不一定会输,要学会去兼容,才能得到一个好的结果。羽毛球也是一项技术运动,跟工作中很多问题都是相通的。

2024-08-21 12:08:37 177

原创 什么是产品开发思维?

见过有一些工程师老手遇到问题,总是看现象猜测是哪里的问题,这是完全错误的分析思路,现象只是表象,要透过现象看本质,一个问题可能会产生几种表象,要拿具体的数据来验证猜想,从现象一步步验证、确认问题,逆向推导找出问题点,再从问题点去发现问题的规律性,这就是分析问题的思维,把问题分析清楚了,基本上就解决50%了。这里借用2022年雷军演讲说过的一句话,在软件工程里学到的最重要的道理,可能会出错的地方,一定会出错,所以,每一个地方一定要去检查,只要你用这种认真的精神去做每一件小事,它就一定可以做好。

2024-08-21 12:07:47 250

原创 嵌入式行业现状

公司在领域布局产业的时候,通常会选择那些市场大,有一定行业壁垒,没有被垄断的行业,那么我们个人在选择的时候也是一样,要学会赋能,比如:MCU+电机控制,MCU+逆变器,MCU+PID算法等等,这样就不一样了,在一个行业深耕几年积累到经验之后,就会有很多的选择机会,当然,如果个人能力在行业内70%以上水平,薪资待遇这一块都不会低的。这几个热门行业的细分产业有:机器人、低空经济、新能源汽车、充电桩、便携储能、储能换电等等,所以会有很大的市场,相对来说工作机会多一些,如果赶上风口行业,工资还会来一波增长。

2024-08-19 12:05:19 219

原创 嵌入式入门学习规划

STM32现在都是从HAL开始学,已经不需要手动初始化造轮子了,有一个对新手非常友好的图像化编程工具STM32CubeMX,把需要的外设配置好,时钟分频设置好,直接生成基础环境代码,通过调用封装好的API,回调函数,在这个上面实现自己的业务逻辑即可,效率大大提升。信号量、消息、邮箱、消息队列等这些怎么使用?做技术不单单是学习技术这么简单,做技术不是目的,要了解市场,学会做一个技术商人,让自己的技术产生价值,不要陷入打工人的陷阱,技术只是手段、工具,是为了实现更高的价值,要去打造自己的圈子,这才是终极目标。

2024-08-19 12:04:42 171

原创 STM32CubeMX一款好用的开发工具

1.基本概念STM32CubeMX采用简单易用的图形界面,可以帮助您快速配置硬件和软件,并生成适用于您的STM32平台的C代码项目。2.特点1) 缩短软件研发周期,提升软件开发效率;2) 设计灵活,自定义外设配置;3) 免费使用。3.市场现状STM32在全球MCU市场的占有率达到了五分之一,而在中国市场,其连续10年的复合年增长率(CAGR)高达27%,在国内占有50%以上的市场。单片机开发从业者,大部分都是从STM32开始学起,结合正点原子开发板,一步步入行。

2024-08-19 10:19:01 523

原创 软构件12-I/O电平滤波算法接口

在PCBA上有一些过大电流的地方,如果有I/O电平操作,这时就容易受干扰,可能会偶发出现一个毛刺,影响功能,为了设备稳定运行,通常会采用I/O口滤波处理,把偶发的毛刺给过滤掉。二、I/O电平滤波算法。

2024-08-16 14:52:33 287

原创 架构设计-分层思想

分层设计是为了剥离硬件环境的依赖,使软件系统更好复用,当更换硬件方案时,只需要修改底层函数的初始化,抽象层和服务层完全不需要改动,这样极大的减小时间成本,平台能够很快投入使用。框架搭建好之后,就是分支设计,分支依据单向调用原则,只能通过上层一层一层去调用到底层的函数,服务层--->抽象层--->HAL层,每一个服务层的业务功能都按照这样的规格去实现。抽象层:用来隔离底层硬件而设计的层,上层只能通过这个抽象层调用底层函数,底层不能反过来调用上层,只能是单向操作,这样逻辑会比较清晰。一、为什么要分层设计?

2024-08-15 18:30:53 423 1

原创 STM32G070休眠例程-STOP模式

主控是STM32G070,在低功耗休眠模式时采用Stop0模式,通过外部中断唤醒,唤醒之后,即可开启对应的功能输出,另外程序中设计有看门狗8S溢出,这个采用RTC定时6S周期唤醒去喂狗,RTC唤醒喂狗的过程中,设备现象上看不出来。1.进入休眠之前,I/O电平根据电路设置,以降低休眠时硬件功耗;2.进入休眠之前,所有计时及标志位清零;3.唤醒之后,重新初始化一次系统时钟;4.RTC唤醒时,不执行功能输出;2.RTC周期唤醒,外部中断唤醒。1.RTC周期唤醒配置。1.STOP0休眠模式。2.外部中断唤醒配置。

2024-06-24 10:58:23 788

原创 STM32CubeMX配置-RTC周期唤醒

MCU为STM32G070,采用内部时钟32KHZ,配置为周期6s唤醒,调用回调函数,进行喂狗操作。初始时间、日期、周期唤醒时间配置。调用回调函数,进行喂狗操作。

2024-06-16 22:35:54 772

原创 STM32CubeMX配置-外部中断配置

MCU为STM32G070,配置为上升沿触发外部中断,在上升沿外部中断回调函数中进行相关操作。查看规格书中管教描述,找到I/O对应的外部中断线,然后进行如下上升沿触发外部中断配置。调用上升沿外部中断回调函数。

2024-06-16 22:13:56 430

原创 STM32CubeMX配置-看门狗配置

一、简介 MCU为STM32G070,LSI为32K,看门狗IWDG配置为4S溢出,则配置是设置分频为32分频,重装载值为3000。二、IWDG配置1.外设配置2.时钟配置

2024-06-16 21:23:42 462 1

原创 STM32CubeMX配置-IIC读写

通过STM32G070配置IIC协议,读取智融SW35xx的电流,读取之前需先配置ADC读取的数据类型,再进行读取。配置的是硬件IIC2,标准模式,100KHZ。

2024-06-02 16:16:42 891 4

原创 软构件8-数据类型定义(结构体,位域)

其他.c函数调用PS_PanelFlt_t内变量,只需声明一下.h即可:#include "SwitchCtl.h"。2.和结构体定义的方式类似,在结构体成员的 后面加上 “:位数”就是他们所占的大小。定义的结构体中有:变量数据、位域标志位。1.作为开关量使用,0和1。

2024-04-21 21:02:19 151

原创 软件加入版本、日期、时间

_attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。attribute,翻译为“属性”,在C语言中,是一个关键字,语法格式为:__attribute__ ((attribute-list))日期、时间:printf("CompileDate: %s %s\r\n",__DATE__,__TIME__);软件版本一般是用空定义,记录内部版本、外部版本;

2024-04-01 22:07:04 308

原创 双向DC-DC BUCK/BOOST电路

如果是适配器输入,则采用恒功率充电方式,只需抬高电池端的电压,得到的电池端功率为适配器范围即可,可以根据不同的输入电压适配多种适配器充电,充电过程中可能需要降压、升压模式相互切换。此电路主要是实现双向DC-DC,双向DC-DC:放电输出和充电输入,4路PWM要采用互补输出模式,Q1、Q2为一路互补输出,Q3、Q4为一路互补输出。放电输出方向是BAT-->DC,原理上:Q1恒定导通,Q2恒定断开,Q3、Q4通过脉宽调试控制使输出DC的电压为12V。充电输入方向是DC-->BAT。

2024-02-14 21:30:50 2950

原创 双向DC-DC电源 - 电池放电(DC12V)

解决问题:PWM驱动IC是EG2132,是通过外围自举电容充电放电来提供高电压输出,当LO脚为低电平时,自举电容充电,这里PWM_L1接的LO脚,PWM_L1如果低电平,MOS管就一直关闭,就无法接地,就不能给自举电容充电,因为这里是悬浮的地,所以,PWM_L1需要给一个1%占空比,才能给自举电容充电,才能有带负载能力。2) BAT降压输出,通过控制PWM_H2和PWM_L2的PWM占空比变化,PWM_H1导通,PWM_L1关闭,当DC端采样得到12V时,即稳定PWM小幅度变化;

2024-02-10 23:14:17 704

原创 STM32CubeMX配置-互补PWM及死区配置(STM32G070)

本工程是基于STM32G070的高级定时器TIM1的通道2和通道3产生两路互补PWM,频率为320KHZ,PWM周期200(即为占空比100%)。因为互补PWM只能由高级定时器产生,STM32G070的高级定时器只有TIM1。//通道2 PWM占空比98%,通道2互补输出PWM占空比2%(PWM占空比100%=200)//通道3 PWM占空比50%,通道3互补输出PWM占空比50%1.使用高级定时器TIM1的通道2和通道3产生互补PWM。

2024-02-07 22:37:07 1987 2

原创 STM32串口通信过载溢出问题

然后,网上查资料,看到HAL库的接收中断里面有加锁、解锁操作,数据量大会导致串口锁死,进入串口接收中断函数,STM32Cube_FW_G0_V1.6.0版本里面没有加锁;3.定时500ms,检测几个串口的ORE是否置位,置位则清除ORE标志,重新打开中断,这个比较稳定靠谱一些,即使串口接收回调函数异常,也不影响清除ORE标志。用STMG070的4个串口中两个串口实时通信时,偶发某个串口通信挂掉,进入不了接收中断函数,但是能进入接收回调函数,另一个串口通信正常,其他程序正常运行?三种解决方案:(推荐第3种)

2023-11-22 23:28:04 2797 3

原创 C# 数据类型转换

1.byte[]转换为string。2.string转换为byte[]3.int转换为byte[]

2023-11-04 15:45:58 912

原创 STM32CubeMX配置-PWM(STM32G070)

【代码】STM32CubeMX配置-PWM(STM32G070)

2023-09-17 17:39:26 379

原创 STM32CubeMX配置-基本定时器TIM6(STM32G070)

通用定时器-TIM3, TIM14, TIM15, TIM16, TIM17。基本定时器-TIM6, TIM7。高级定时器-TIM1。

2023-09-17 17:19:12 940

原创 STM32CubeMX配置-串口配置(RCC,Manager配置)

生成代码默认不开中断,初始化时需打开中断,程序才会进入中断函数。如果要调用中断函数,初始化时需打开中断。4.工程配置 Project Manager。

2023-09-17 16:52:39 1904 1

空空如也

空空如也

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

TA关注的人

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