
嵌入式MCU
文章平均质量分 87
MCU类
宁静致远2021
天道酬勤,持之以恒。
发上等愿,结中等缘,享下等福;
择高处立,寻平处住,向宽处行。
展开
-
无法回避的字节对齐问题,从八个方向深入探讨(变量对齐,栈对齐,DMA对齐,结构体成对齐
回答:没有__packed的会出现字对齐等也就是,char型的有可能是占用4个字节的长度的内存空间有__packed 的就不会,就肯定是1个字节的内存空间,是gcc编译器的关键字。(不止vc下面32位的系统里面的内存数据的存取是32位的,处理的时候都是4个字节为单位,通常也就是int的长度。4.若自定义的malloc函数本身没有对分配的内存实现4字节或以上的对齐操作,分配出来的不对齐的内存,编译器是不知道的,所以很可能会产生问题。字节对齐的含义:4字节对齐的含义就是变量地址对4求余数为0;原创 2025-05-07 09:38:42 · 643 阅读 · 0 评论 -
温湿度传感器SHT40(第四代)&SHT20(第二代)
然而,SHT20仍因其成熟的性能和相对的成本优势,在很多应用中仍有广泛的使用。•SHT40:相比SHT20,SHT40在精度和稳定性上有进一步提升,温度精度可达±0.2°C(典型值),湿度精度可达±1.8%RH(典型值),并且具有更好的长期稳定性。•SHT40:相对于SHT20,增加了更多的内部自校准功能,能够更好地补偿传感器老化和温度漂移,从而在整个产品生命周期内保持高精度。•SHT20:具有高精度的温湿度测量能力,温度精度±0.3°C(典型值),湿度精度±2%RH(典型值),并且具有良好的长期稳定性。原创 2025-02-26 20:43:17 · 1734 阅读 · 0 评论 -
VS Code User和System版区别【推荐使用System版本】and VSCode+Keil协同开发之Keil Assistant
把软件也分用户和系统管理员,对于普通用户而言,为了避免不必要的麻烦,建议使用System版,仅供参考。对于User版安装程序以及VScode程序默认均为英文,貌似不能读取系统语言环境,System版直接是中文安装程序,以及中文显示面板。User版本无法在系统分区(盘) 创建默认文件夹Microsoft VS Code,可见权限不足。Visual Studio Code官网却提供了User和System两个版本。对于System版无此问题,可next step到底,和其他不分的软件一样了。原创 2025-02-16 19:48:14 · 1675 阅读 · 0 评论 -
嵌入式C语言之结构体封装函数
由于函数指针的定义和使用都在结构体内部,因此修改或调整代码时,只需要修改结构体中的函数指针定义或调用方式,而不需要修改其他部分的代码,从而使得代码更加健壮、易于维护和修改。这种方法可以将代码的复杂性分解到不同的模块中,降低了代码的耦合性,提高了代码的可读性和可维护性。更好的隐藏实现细节:结构体封装函数使得函数的实现细节被封装在结构体内部,只有结构体暴露给外部的函数指针,实现了良好的封装和信息隐藏。值得注意的是,在实际应用中,我们需要根据实际情况修改函数的实现,以及结构体中的成员变量和函数指针的数量和类型。原创 2024-10-14 15:30:29 · 1042 阅读 · 0 评论 -
【嵌入式C语言】crc32校验的c语言实现
一种的多项式也有很多种变化,输入输出方式也有区别,有一些初始值是0,有一些初始值是0xFFFFFFFF,有一些直接返回,有一些异或返回,因此,CRC校验很难用一个代码兼容全部,只能根据具体项目修改相关参数。对于不同类型的文件所使用的多项式以及算法不同,对于不同的生成多项式所生成的crc32表不同,不同的算法也会产生不同的结果。生成多项式采用0xEDB88320的时候,生成的crc32Table的算法如下。CRC算法查表法很常见,但表是怎么来的,看了上面的代码应该就可以清楚了。查表法CRC32校验算法。原创 2024-10-14 13:29:31 · 2389 阅读 · 0 评论 -
QT串口读取Serial->readAll()踩过的坑
因为串口设置的是8位数据位,因此拿到的数据是32位,但是博主想要的是“00 10 00 00 00 00 01 00 28 00 0A 01 01 01 01 00 \r\n”。主要是串口每次只能打印32个字节的数据,如果多了就会把数据放到缓冲区,这导致要二次打印,使json格式不连续,就构不成json格式,如下图。上位机的写入lcd_Number的数据,因为单片机是分时发送数据,当发送power的数据时,电流、电压的json解析失败,那存放电流,电压的数据肯定为 0。这样处理后拿到的数据是:如图。原创 2024-09-07 09:59:26 · 4246 阅读 · 0 评论 -
电容参数X5R,X7R,Y5V,COG 全面讲解!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。原创 2024-06-13 15:30:00 · 4759 阅读 · 0 评论 -
【选型】效率高达95%,国产电源芯片SCT2650 可PIN TO PIN 替换TPS54560
随着网络信息技术的快速发展,5G基站建设规模不断扩大,某客户在研发一个5G大功率基站的项目,使用到了一款TI的电源芯片TPS54560,目前因为TI的交期比较紧张,急需要一款参数合适的国产电源芯片去替代它。2、虽然说SCT2650的静态电流没有TPS54560小,但是SCT2650的内置MOS管的导通电阻要比TPS54560小,说明SCT2650的功耗可以做的比TPS54560小,这大大地延长了芯片的使用寿命;最后,SCT2650除了具有更高的效率之外,芯洲科技还可以提供及时的技术服务和稳定的现货支持。原创 2024-05-16 20:34:30 · 2647 阅读 · 0 评论 -
RS232,RS485接口模块PCB布局布线EMC浪涌防护设计规范
RS232接口多用于计算机与设备之间的通讯,用于数据监控及调试。在应用的过程中通讯电缆容易耦合外部的干扰对信号传输造成一定的影响,单板内部的干扰也可能通过电缆形成对外辐射。本方案从EMC原理上,进行了相关的抑制干扰和抗敏感度的设计,从设计层次解决EMC问题。原创 2024-05-10 17:15:51 · 3517 阅读 · 0 评论 -
自动方向控制RS485芯片
注意:这一系列手册是一起的,MAX13410E MAX13413E MAX 13414E MAX13415E都是不带自动换向功能的,并且引脚功能和传统MAX13487还不一样。市场上进口芯片支持 自动换向的RS485芯片 只有4款芯片,分别是ADI和TI家的,没有其它进口厂家选择。另外 找到一些国产 自动换向的RS485芯片(后半部分),这些国产芯片 个人没用过,不知晓芯片质量,各位慎重选用。原创 2024-05-09 14:02:23 · 1682 阅读 · 0 评论 -
C语言 sizeof和strlen的区别
我们知道字符串是以 ‘\0’ 为结束标志的,所以char str1[ ] = “hello” 等效于char str2[ ] = {‘h’ , ‘e’ , ‘l’ , ‘l’ , ‘o’ , ‘\0’}。strlen函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到’\0’停止。2、 strlen 测量的是字符串的实际长度,以’\0’ 结束,返回结果不包括’\0’。类型-该类型所占的空间的大小;原创 2024-04-20 20:18:27 · 1087 阅读 · 0 评论 -
C语言 memcpy内存块拷贝函数
memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。s指向要填充的内存块。c是要被设置的值。n是要被设置该值的字符数。返回类型是一个指向存储区s的指针。需要说明的几个地方。原创 2024-04-19 19:37:34 · 1260 阅读 · 0 评论 -
STM32F407单片机通用24CXXX读写程序(KEIL),兼容24C系列存储器(24C01到24C512),支持存储器任意地址跨页连续读写多个页
通俗的讲就是128Byte就占用了128个地址,一个7bit的数据范围为(0-127)刚好128,所以128Byte的字节地址需要一个7bit的数据来表示。AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256…比如AT24C256有512页每页64个字节,15bit的地址数据对其寻址,低6bit(D5-D0)为页内字节单元地址,高9bit(D14-D6)为页地址。四、AT24CXXX页地址与页内单元地址。原创 2024-04-11 15:22:13 · 1409 阅读 · 0 评论 -
关于MCU产品开发参数存储的几种方案
参数的初始化方法,首先读取EEPROM的0位置处的数据,判断是否为0x55AA合法标志,若不是0x55AA,则说明参数区为首次使用,需要进行初始化默认参数填充,于是将DefaultValues所指的默认值填入EEPROM中,并设置0x55AA标志,以后每次上电便会检测到参数的合法性。别急,有另类的方式可以达到这种功能,在编译时让编译器为你检查,而且准确性 100%(当然,这个添加新参数时你还得简单根据新增的参数大小减少预留的大小,这个是必须要的)原创 2024-04-11 11:56:59 · 2298 阅读 · 0 评论 -
基于STM32CubeMX移植freeModbus RTU(从站)-避坑篇
ModbusRTU是通过定时器和串口配合来实现Modbus通信的,所以定时器是决定有没有超时的一大关键问题,由串口设置部分可知,定时器设置是要配合串口设置的波特率食用比较香,所以根据我使用的115200波特率可以得到我定时器设置。13.打开工程,引入STM32MB内的所有头文件,并新建名为MB和MB_Port的组,MB内添加STM32MB文件夹下modbus文件夹内所有c文件以及根目录的demo.c文件,MB_Port内添加STM32MB文件夹下port文件夹内所有c文件,如图所示。原创 2024-04-01 09:28:06 · 3267 阅读 · 0 评论 -
浮点数的比较以及abs和fabs的区别
我们知道有的小数可能小数点后有很多为,比如无限循环小数、无限不循环小数,而计算机中的float和double能够表示的小数范围是有限的,因此浮点数在计算机中的存储是不精确的。使用abs求浮点数的绝对值是有问题的,使用fabs求整数的绝对值也是有问题的,所以在C语言中求浮点数的时候一定要选对函数。在C++中,abs和fabs都是用来计算数值的绝对值的函数,但它们之间存在一些重要的区别。fabs:对于浮点数,精度取决于具体的实现和平台,但通常足够用于大多数的数值计算。abs:通常用于计算整数的绝对值。原创 2024-03-02 13:16:26 · 6545 阅读 · 0 评论 -
用Excel教会你PID算法
PID调节示意图如下可以发现:比例项是纠正偏差的主力,越远离偏差绝对值就越大,快速把偏差纠正回来。积分项和以往的状态有关,面积的绝对值越大它的绝对值就越大,它的作用是消除累计偏差。微分项跟斜率有关,比较难解释,总的来说它的作用是:当目标靠近设定值时加速它靠近,当目标远离设定值时阻止它远离。因此微分可以增加系统稳定性,因为到达目的之后,离开会受到阻碍。原创 2024-02-23 09:02:02 · 2569 阅读 · 0 评论 -
mcu专用看门狗复位芯片(如MAX706)
sgm706是圣邦微(SGMICRO)电子新推出的多功能微处理器监控电路芯片,除了看门狗功能外,还具有上电自动复位、手动复位及低电压报警(复位)等功能,使用起来非常方便可靠,可替代MAX706。一般的电路设计者,使用的阻容复位稳定性极差,时常有按了复位没反应,或是要按一段时间才能复位的经历。使用低电压检测和复位芯片,主要可以最大程度提高单片机的复位性能,其原理是通过预先设定好确定的电压值(阈值)启动复位操作,同时排除瞬间干扰的影响,又有防止单片机在电源启动和关闭期间的误操作效,充分保证数据的**。原创 2024-01-29 14:54:55 · 9458 阅读 · 1 评论 -
STM32F030C8读取CS1237采集模拟
第二个想到的原因是,硬件CS1237和STM32的电平兼容问题,我的电路CS1237是5V供电,stm32是3V3供电,它们之间SPI通过22欧姆电阻串联。(1) 设置STM32的DOUT端口为INPUT,监测来自CS1237的DOUT电平,一般芯片上电后,CS1237的DOUT会不断地输出高脉冲(示波器测量约20us的高脉冲),代码中要监测到DOUT的”下降沿“,然后才是读写配置和读取ADC转换数值的操作;一顿仔细检查代码,发现了STM32端口配置的”笔误“,修改后,仍然无法正确配置CONFIG;原创 2023-12-13 15:04:56 · 2546 阅读 · 2 评论 -
热敏电阻NTC、PTC
NTC、PTC是什么?对于没有接触过NTC、PTC或刚接触过NTC、PTC的人来说,NTC、PTC是什么也不知道,当然,了解NTC、PTC概念也是比较简单的,但是当你去搜索资料,看到许许多多的懵懵懂懂的专业名词时,以及看到一些硬件,可能会出现些许傻眼,毕竟没接触过,满脑问号。对于初学者或急于敢项目的软件工程师,尽快初步了解,学习到基本原理,代码跑出正确的数据就是最好的。毕竟学习是渐进的,不可一蹴而就就能深入其原理。原创 2023-12-09 15:42:21 · 5351 阅读 · 0 评论 -
PID控制参数整定(调节方法)原理+图示+MATLAB调试
首先调节P的数量级达到一个只有2个左右明显峰值的波形,再调节I找到不会波形振荡也不会没有超调的的区间,在区间内找到一个I将稳态误差尽可能消除。最终使用D来控制衰减比和波形的峰值、超调量。最后根据要求的稳态值、调节时间、超调量、上升时间、峰值时间等指标进行微调达到目标。最后可以总结成一个口诀参数整定找最佳,从小到大顺序查,先是比例后积分,最后再把微分加,曲线振荡很频繁,比例度盘要放大,曲线漂浮绕大湾,比例度盘往小扳,曲线偏离回复慢,积分时间往下降,曲线波动周期长,积分时间再加长,原创 2023-12-09 10:59:18 · 12988 阅读 · 0 评论 -
大电流H桥电机驱动电路的设计与解析(包括自举电路的讲解,以IR2104+LR7843为例)
之前介绍过H桥电机驱动电路的基本原理,但是以集成的电机驱动芯片为示例。这些集成的芯片使用起来比较简单,但是只能适用于一些小电流电机,对于大电流的电机(比如:RS380和RS540电机),则不能使用这些集成的芯片(否则会导致芯片严重发热并烧毁)。此时便需要自行用半桥/全桥驱动芯片和MOS管搭建合适的H桥电机驱动电路实现对大电流电机的驱动控制。在学习此部分之前,需要先掌握基础H桥驱动的工作原理,具体可参看此篇博客:电机驱动芯片(H桥、直流电机驱动方式)原创 2023-12-09 09:26:07 · 14172 阅读 · 8 评论 -
J-LINK J-FLASH 下载STM32单片机程序使用教程
下载失败时,重新connect,然后点击 unsecure chip解锁芯片 再点击 erase chip擦除芯片,然后再重新Program F5即可正常下载 )如果芯片有读写保护或下载失败,可以点击先Unsecure Chip(解除保护)再点击Erase Chip(擦除芯片),然后再烧重新烧写程序。另一种方法是 烧写失败后 重新连接MCU,点击Targe- Production Programming F7, 即可开始烧写程序,这个选项会自动执行芯片擦除+烧写+校验3个步骤。然后重新对目标板断电,上电。原创 2023-12-02 17:45:49 · 5251 阅读 · 0 评论 -
stm32 Bootloader设计(YModem协议)
若第1字节为SOH时有128字节,为STX时有1024字节,这部分为数据区。“Foo.c” 文件名, 超级终端下,在文件名后还有文件大小。官方dome也是因为使用了这个文件大小进行比对。这就是为什么用SecureCRT中的YMODEM协议而无法正确传输的原因。在文件名和文件大小之后,如果不满128字节,以0补满。最后两字节:这里需要注意,只有数据部分参与了效CRC验,不包括头和编码部分。原创 2023-11-08 15:23:42 · 2688 阅读 · 0 评论 -
STM32 IAP应用开发--bootloader升级程序
IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到数据存储区,从而实现固件升级。原创 2023-11-05 15:12:32 · 2869 阅读 · 0 评论 -
【转载】STM32 Timer定时器开机立即进入中断问题(HAL库)
细心的朋友会发现TIM_SR_UIF其实是SR(定时器状态寄存器)的最低位,初始化时若TIM_SR_UIF为1则SR也为1,若TIM_SR_UIF为0则SR也为0,因此存在另一种解决办法:将__HAL_TIM_CLEAR_FLAG(&htim7, TIM_SR_UIF);原因就是HAL库中定时器初始化后没有更新中断标志位,__HAL_TIM_CLEAR_FLAG(&htim7, TIM_SR_UIF)后清除了更新中断标志位,此时TIM_SR_UIF为0,中断产生后TIM_SR_UIF为1。原创 2023-02-25 14:34:17 · 3312 阅读 · 2 评论 -
【转载】MDK中的中文字体乱码解决方法
在MDK中添加中文注释的时候,如果写错了想删除,一般是删一次会出现乱码的问题,特别是想在一段中文中插入一句话时,光标位置没选好的话后面的注释都会受到影响而现实乱码,一般解决的方法是在MDK的configuration中选择GB2312等一些中文编码方式,如果直接选择UTF-8,可能会出现现有的注释乱码问题,选择GB2312的话,整个编译器的字体都会改变,个人还是比较喜欢自带的Consolas字体,英文显示效果还可以,当然有些会选择用黑体,个人觉得还是不够好看,特别是用黑体英文的显示不好。原创 2023-02-24 09:12:14 · 423 阅读 · 0 评论 -
Win10解决COM口大量在使用中问题的方法
1. Windows+R 输入cmd回车2. 输入regedit打开注册表编辑器3. 进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter4. 删除ComDB文件5. 打开设备管理器,扫描硬件改动就可以了,若还是不行则重启计算机原文链接:https://blog.csdn.net/William_Zhang_CSDN/article/details/124501639原创 2023-02-20 13:26:06 · 1113 阅读 · 0 评论 -
STM32HAL库调用内部API却显示未定义解决方法
问题描述在使用hal库进行开发时,碰到明明已经在项目管理里添加了STM32 hal库的驱动文件,并且头文件也已经添加了正确的路径,但是编译时仍然显示undefine,KEIL中也没有相应的代码提示的问题。不用怀疑,一定是相关头文件没有包含进来导致的。那怎么解决呢,难道还要将一个个头文件手动include一下吗?其实这些宏定义也不用你自己去写,在文件的开头已经定义好了,只不过是注释掉了,你需要使用什么功能就把相应的注释去掉就行了。原创 2023-02-20 13:12:33 · 1215 阅读 · 0 评论 -
【转载】通过HAL库实现MODBUS从机程序编写与调试-----STM32CubeMX操作篇
手把手教你,通过HAL库实现MODBUS从机程序编写与调试(一)-----STM32CubeMX操作篇原创 2023-02-15 09:58:03 · 2069 阅读 · 0 评论 -
STM32 HAL库-定时器中断
STM32F407 有众多的定时器,其中包括 2 个基本定时器(TIM6 和 TIM7)、10 个通用定时器(TIM2 ~ TIM5、TIM9 ~TIM14)、2 个高级控制定时器(TIM1 和 TIM8),这些定时器彼此完全独立,不共享任何资源。选择定时器,配置时钟源,设置预分频系数,计数模式,设置自动重装载值。原创 2023-02-15 09:13:46 · 15787 阅读 · 2 评论 -
10种ADC软件滤波方法及程序
如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统。如果采样值当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。N值的选取:流量,N=12;是对递推平均滤波法的改进,即不同时刻的数据加以不同的权。原创 2023-02-11 15:07:46 · 2051 阅读 · 0 评论 -
Win10安装TortoiseGit,报错误码 2503
输入 msiexec /package + 安装程序所在的绝对路径,如: msiexec /package F:\DownLoad\TortoiseGit-2.10.0.0-64bit.msi。原创 2023-02-10 16:06:29 · 725 阅读 · 0 评论 -
STM32 BSRR BRR ODR 寄存器解析(F4系列已经去掉BRR寄存器了)
G0x0系列GPIO寄存器F4系列GPIO寄存器(没有BRR寄存器了)经常会看到类似如下的宏定义语句,用于对已经初始化后的 IO 口输出高、低电平。其作用类似于如下两个库函数,而且实际上这两个库函数就是通过修改BSRR,BRR寄存器的值来实现对 IO 口设置的。如下便是输出高电平的函数体:因此,使用宏或者库函数本质上都是一样的。区别在于使用宏更快,而使用函数更灵活。注意:在要求速度/书序的更快更严格的场合,建议使用宏定义操作IO口对应的引脚。BSRR 和 BRR 都是 STM32 系列 MCU 中原创 2022-11-17 09:01:42 · 3762 阅读 · 2 评论 -
MAX6675应用注意事项
当CS为高电平的时候开始转换,转换时间约为220ms,当CS为低电平时,停止转换,通过SO读取转换结果。否则,读取的数据一直为0或者不变。配置SPI时序时,为MODE 0,即SCK空闲电平为0, 采集在上升沿(CPOA=0),读取数据在下降沿。3.介于STM32只读,就只用3根线,SO,SCK,CS。说明:1.片选任意IO管脚即可,低电平有效!一个SPI接口,配合N通道片选。2.K型热电偶分别接T+,T-;原创 2022-11-04 08:58:19 · 5033 阅读 · 3 评论 -
解决vscode中文乱码问题(不是改GBK,亲测有效)
配置好了以后,下载vscode后也出现了输出中文的乱码问题,用与codeblocks相似的解决方法解除之,又发现网上都是将编码转为GBK(这样用其他应用打开时可能又会出现乱码),好像没有提到这个方法,特此记录之。就是电脑上其他用GBK编写的软件都会出现错误,相当于用大错误换小错误,可以尝试,但不推荐。是因为中文主要有两套编码,一套是GBK,一套是UTF-8,代码编辑器一般默认用UTF-8,而在输出的终端中默认是GBK,所以在UTF-8下的中文输出到GBK的终端自然会乱码。,按enter进入,会打开一个叫。转载 2022-10-30 20:04:54 · 28957 阅读 · 2 评论 -
stm32cubemx针对STM32F103系列问题挖坑-CMSIS-DAP不能下载调试
使用环境:STM32F103系列HAL库版本: V1.8.4。原创 2022-09-08 13:55:26 · 966 阅读 · 0 评论 -
解决Win10下cmd中git status中文文件名乱码问题
win10下cmd中git status中文名称乱码问题及解决方法原创 2022-09-08 13:42:50 · 882 阅读 · 0 评论 -
Git 开发必备 .gitignore 详解
在使用 git 过程中,掌握 .gitignore 的使用很重要,可以减少不必要的文件上传到远程。原创 2022-09-07 10:52:47 · 1766 阅读 · 0 评论 -
AD7190之STM32程序
AD7190是一款适合高精密测量应用的低噪声完整模拟前端。它集成一个低噪声、24位Σ-Δ型模数转换(ADC)。片内低噪声增益级意味着可直接输入小信号。这款器件可配置为两路差分输入或四路伪差分输入。片内通道序列器可以使能多个通道,AD7190按顺序在各使能通道上执行转换,这可以简化与器件的通信。片内4.92 MHz时钟可以用作ADC的时钟源;或者,也可以使用外部时钟或晶振。该器件的输出数据速率可在4.7 Hz至4.8 kHz的范围内变化。这款器件提供两种数字滤波器选项。原创 2022-08-22 13:34:30 · 5100 阅读 · 2 评论