
STM32
王光环
zzuliʕ̯•͡˔•̯᷅ʔᐝ
我坚信灵魂的纯粹,我忠于不爱的自己。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
结构体定义嵌套定义
对于不熟悉这种嵌套结构体的开发者来说,可能会对代码的理解产生困难。例如,他们可能会误以为 WCH 和 RCH 是独立的结构体,而不是嵌套在 AD4858_IOMap_TypeDef 中的字段。不必要在外部定义其他的结构体声明,更符合面向对象的设计思想。这种初始化方式会导致编译错误。在C语言中,嵌套结构体不能直接初始化。缺点:增加编译器负担。原创 2025-05-28 18:59:33 · 143 阅读 · 0 评论 -
STM32H743IIT6_ADC采集误差分析与ADC_DMA
ADC误差分析与ADC_DMA原创 2025-05-16 19:08:15 · 954 阅读 · 0 评论 -
函数指针的作用与具体应用
函数指针是一个指针变量,他是指向某个函数的。指针函数是函数,这个函数的返回值是指针。所以使用函数指针需要三步原创 2025-04-13 01:35:43 · 460 阅读 · 0 评论 -
单片机使用printf,不用微库
由于MicroLIB对是缺省 C 库的备选库,它是为了配合实现要装入到极少量内存中的深层嵌入式应用程序而存在的,而这种使用场合下,多数是没有操作系统的,故它删除了与操作系统有关的函数,并且不符合 ISO C 库标准, 不支持某些 ISO 特性;原文链接:https://blog.youkuaiyun.com/sarsscofy/article/details/122395372。// 加入以下代码,以支持printf函数,而不需要选择use MicroLIB;//定义_sys_exit()以避免使用半主机模式。原创 2025-04-02 13:38:36 · 402 阅读 · 0 评论 -
串口/其他接收的回调函数流程
回调函数加链表而已,没啥高大上的,链表的每个节点是一个结构体,这个结构体有命令id,该命令的执行函数指针,下一个节点的地址等。如果串口或者其他收到消息id,就在此链表查询id是否匹配,也就是查链表,如果匹配则执行该id的函数指针。注册回调就是把这个函数指针加到此链表里面。原创 2025-03-31 10:53:10 · 104 阅读 · 0 评论 -
keil的代码美化工具AStyle3.1
F:\Software\keil break\MDK\there mdk\AStyle\astyle.exe 这个写exe所在的文件路径就行,不用和我一样。工具就是AStyle,但是现在官网发的安装包不好用,我之前用的版本挺好的。原创 2025-03-29 19:27:40 · 210 阅读 · 0 评论 -
keil已有项目改工程名
如果有现成的工程(往往都会有现成的工程),只需要稍微修改工程信息,借助这个基础工程会节省很大的开发周期;说明下如何简单快速的修改工程。原创 2024-12-22 20:35:09 · 253 阅读 · 0 评论 -
嵌入式栈溢出怎么办?
在写文件的时候,因为把FATFS这些数据结构定义在了函数里,所以栈溢出了,我把比较大的数据结构放在全局变量上,就没事了.目前仅测试阶段,也可以放在堆里.不用的时候释放掉,减少耦合度.或者加static.原创 2024-09-13 15:52:23 · 279 阅读 · 0 评论 -
Keil下载烧录程序到单片机提示flash outtime超时
3.有外部看门狗,外部看门狗用跳帽屏蔽了再下载,要用跳线帽短接外部看门狗,不要用杜邦线,之前试过杜邦线有时候不行,阻挡不住外部看门狗复位,跳线帽可以。2.RESET按键按一下再下载(或者一直按着下载),这样能让单片机进入烧录模式。原创 2024-09-05 09:26:06 · 900 阅读 · 0 评论 -
关于keil程序无法进入main函数问题
上面这么多其实就是想全擦然后分别写入程序和bootloader进单片机flash。到此,bootloader和代码都烧写好了,把擦除全片改为擦除扇区(否则再次烧写会把bootloader冲掉)3.编译完烧写在单片机上,这一步相当于冲掉了bootloader,只下载了程序进入单片机的flash。1.把单片机的芯片上的数据全擦了(bootloader+代码数据)情况:之前烧写没问题,不然再次烧写的稍后显示boot损坏。不会烧写bootloader的看这个。断点都取消掉,编译下载进去。然后勾选下面这两个框。原创 2024-08-07 11:02:41 · 1283 阅读 · 0 评论 -
Jlink调试的时候提示擦除超时,programming failed @ address 0x0804000
Jlink,调试原创 2024-07-04 14:36:43 · 624 阅读 · 0 评论 -
串口接收第一个字节接收不到
我在第一个字节收到后加了一个字节的延时(用标志位控制)。注意不能加太久延时,否则空闲中断发生,挥着中断时间溢出后面的字节都收不到了。看了网上说的,我一次只发一个字节不会出现这种情况,发多个字节全速运行就会出现这样情况,于是我怀疑是全速运行的锅。全速运行第一个字节就没有了。但是把接受的数据再发出来,发现第一个字节到了最后一个字节。我发 5 1 2 3 他接受的是1 2 3 5。我是115200的波特率,加了8us。原创 2024-04-17 09:34:33 · 621 阅读 · 0 评论 -
按键扫描思路详解
第一次执行时,如果按下了,返回按下的值,第二次执行key_UP为0了,如果你连续按着,只返回一次结果,第二次if(key_up&&(KEY0。当mode为1时支持连续按那么key_UP始终为1,static只执行一次。第二次执行的时候就忽略static这句话了,化简程序为。0)key_up=1;这里面因为连续按也不满足,所以第二次直接返回return 0.这是二合一的代码(mode为0不支持连续按,为1支持)当一直扫描时会不停的反馈结果。当mode=0不支持连续按。原创 2022-11-12 23:59:55 · 1177 阅读 · 1 评论 -
看门狗实验
比如我们设定 prer 值为 4,rlr 值为 625,那么就可以得到 Tout=64×625/40=1000ms,这样,看门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0XAAAA 到 IWDG_KR,就不。这里需要提醒大家的是,看门狗的时钟不是准。确的 40Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。一直喂狗就不会复位了,但是如果程序跑飞,就喂不成狗,就会复位了。主函数,1s为溢出时间,不喂狗会闪烁,1s内喂不会闪烁。单位ms,prer预分频值,rlr重装载值。原创 2022-11-12 23:02:54 · 868 阅读 · 0 评论 -
串口配置代码
【代码】串口配置代码。USART_RX_STA讲解。一个16位的数diy成寄存器原创 2022-11-04 21:31:53 · 501 阅读 · 0 评论 -
正点原子简单实验
头文件里记得声明函数。ifndef是为了避免头文件重复声明。led.h里面声明一次就行了,不用在main.h或者和其它.h里面声明了。在rcc.h头文件有时钟开启函数,APB2Periph这个。为什么用APB2呢,因为它能映射PA5这个GPIO。中文参考手册里面看RCC APB2寄存器。然后做一个0.5秒的开和关灯操作就行了。位6和位3是gpioE,gpioB。原创 2022-10-01 10:11:15 · 512 阅读 · 0 评论 -
GPIO和IO
在实际的MCU中,I/O 是有多种形式的。比如,有的数据寄存器能够依照位寻址,有的却不能依照位寻址,这在编程时就要区分了。比如,传统的8051系列,就区分成可位寻址和不可位寻址两种寄存器。另外,为了使用的方便,非常多的 MCU 把 Glue Logic 等集成到芯片内部,增强了系统的稳定性能,比方GPIO接口除去两个标准寄存器必须具备外,还提供上拉寄存器,能够设置I/O的输出模式是高阻,还是带上拉的电平输出,或者不带上拉的电平输出。这在电路设计中,外围电路就能够简化不少。4、IO端口和IO内存。转载 2022-09-29 10:42:47 · 3942 阅读 · 1 评论 -
GPIO输入输出方式
(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了.但是不接电阻上拉的时候,这个输出高就不能实现了.由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。原创 2022-09-28 22:54:57 · 802 阅读 · 0 评论 -
ARM是什么,UART和USART
在电子通信领域,波特(Baud)即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。单位“波特”本身就已经是代表每秒的调制数,以“波特每秒”(Baud per second)为单位是一种常见的错误,但是在一般中文口语化的沟通上还是常以“波特率”来描述“波特”(Baud)。USART是指单片机的一个端口模块,可以根据需要配置成同步模式(SPI,I2C),也可以将其配置为异步模式,后者就是UART。(摘自知乎-Sean回答)ARM是精简指令集的架构,华为,ST的芯片用这种架构。原创 2022-09-14 16:12:26 · 301 阅读 · 0 评论