
STM32
文章平均质量分 94
宁静致远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 · 755 阅读 · 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 · 2440 阅读 · 0 评论 -
嵌入式C语言之结构体封装函数
由于函数指针的定义和使用都在结构体内部,因此修改或调整代码时,只需要修改结构体中的函数指针定义或调用方式,而不需要修改其他部分的代码,从而使得代码更加健壮、易于维护和修改。这种方法可以将代码的复杂性分解到不同的模块中,降低了代码的耦合性,提高了代码的可读性和可维护性。更好的隐藏实现细节:结构体封装函数使得函数的实现细节被封装在结构体内部,只有结构体暴露给外部的函数指针,实现了良好的封装和信息隐藏。值得注意的是,在实际应用中,我们需要根据实际情况修改函数的实现,以及结构体中的成员变量和函数指针的数量和类型。原创 2024-10-14 15:30:29 · 1134 阅读 · 0 评论 -
【嵌入式C语言】crc32校验的c语言实现
一种的多项式也有很多种变化,输入输出方式也有区别,有一些初始值是0,有一些初始值是0xFFFFFFFF,有一些直接返回,有一些异或返回,因此,CRC校验很难用一个代码兼容全部,只能根据具体项目修改相关参数。对于不同类型的文件所使用的多项式以及算法不同,对于不同的生成多项式所生成的crc32表不同,不同的算法也会产生不同的结果。生成多项式采用0xEDB88320的时候,生成的crc32Table的算法如下。CRC算法查表法很常见,但表是怎么来的,看了上面的代码应该就可以清楚了。查表法CRC32校验算法。原创 2024-10-14 13:29:31 · 2814 阅读 · 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 · 1099 阅读 · 0 评论 -
C语言 memcpy内存块拷贝函数
memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。s指向要填充的内存块。c是要被设置的值。n是要被设置该值的字符数。返回类型是一个指向存储区s的指针。需要说明的几个地方。原创 2024-04-19 19:37:34 · 1299 阅读 · 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 · 1471 阅读 · 0 评论 -
STM32F4 IAP跳转APP问题及STM32基于Ymodem协议IAP升级笔记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。原创 2024-04-10 10:51:05 · 2123 阅读 · 0 评论 -
关于STM32单片机延时微妙(delay_us)函数-hal库
自己外部晶振为8M,查单片机对映的是时钟框图如下,可以看出时钟从外部HSE_OSC来的为8M,经过以一个选择器后,进入PLL锁相环,之后去了AHB PRESC,最后经过一个/8的分频后就是滴答定时器的频率。近段时间调试一个STM32带多个DS18B20传感器,发现这个传感器对时序要求特别高,而使用的固件是HAL库版的,里面没有专门微米级别的延时函数,通不过不断尝试,调通了延时函数,使DS18B20成功跑起来了。写此篇文章来记录本次调试。,所以放心的使用 delay_us 来实现 delay_ms,不。原创 2024-04-08 15:17:37 · 11487 阅读 · 0 评论 -
STM32的NVIC中断以及抢占优先级和响应优先级
抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A),抢占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达, 则先处理响应优先级高的中断, 响应属性由NVIC_IRQChannelSubPriority 参数配置。第0组 0 0 0 0。原创 2024-04-08 14:02:16 · 1172 阅读 · 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 · 3656 阅读 · 0 评论 -
STM32利用AES加密数据、解密数据
1、AES_KEY_LENGTH取值只能是128,192 和 256。3、加密、解密数据长度为AES_KEY_LENGTH/8的整数倍字节。2、密钥和向量表长度为AES_KEY_LENGTH/8个字节。原创 2024-03-15 14:35:25 · 5739 阅读 · 0 评论 -
STM32 JLINK SWD调试器手动复位才能烧写的问题
如果我们使用的代码对SWD口进行了一些配置,导致reset指令无法通过SWD口接收的话,调试器就无法reset MCU。解决办法就是不要复用SWDIO 口,否则使用reset pin。手动写代码的时候,SWDIO我们可以自己把握,不去配置就可以用,所以一般来说都在掌控中。MDK中关于reset的设置比较复杂一般使用normal,如果有兴趣可以通过下链接了解。STM32CubeMX的程序就有问题?只有手动复位的情况下,才能进行烧写。为什么烧录程序一次后就无法连接调试器烧录,一定要手动复位?原创 2024-01-06 16:12:42 · 1985 阅读 · 0 评论 -
利用STM32和可控硅控制220V加热电路
如下图所示,可控硅不受HotPWM1控制,主要原因为电流可以经过可控硅Q1的1和3引脚直接流过,不受MOC3061控制。所以,应该将可控硅的1和2引脚对调,如下下图所示,即可完成控制。原创 2023-12-24 14:36:49 · 11836 阅读 · 2 评论 -
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 · 2884 阅读 · 2 评论