- 博客(12)
- 收藏
- 关注
原创 C语言指针-JKX笔记
小端是低位地址存低位数据。低字节存低地址,高字节存高地址是小端序。现在计算机普遍是小端分配的。数组在内存中必须分配一个连续的空间,单个内容按小端存储,整体数组是按顺序存储的。地址有多大,指针就有多大,而地址与系统有关。如果电脑是64位的,但显示是4个字节,则说明编译器环境是32位的。
2025-12-28 18:48:10
116
原创 嵌入式开发中的地址问题(以STM32为例)
32位嵌入式开发中的地址问题涉及硬件特性、编译器行为和软件设计。深入理解芯片内存布局、掌握链接脚本配置、严格遵循对齐规则和正确使用指针/
2025-09-04 15:40:16
2116
原创 产测相关代码
factory_test()函数在主循环中循环。factory_rw为全局变量,默认0.所以只有上电就为0,请求上位机发送数据并接收。如果此时按键七秒进入产测,会将process_flag置1,进而将factory_rw置1进入下一步。否则只循环读取不执行下一步。exit_flag为全局变量,上电置0factory_test()函数在主循环中每秒调用一次。
2025-08-11 11:24:11
326
原创 杂项相关地
USB设计上很严谨,遵循着“只要能插的进去就能用”的原则,而快速充电大多使用更高的电压,这样用户很可能把不支持快充的设备插入快充充电器;如果通信错误持续,通信过程将会被软重置并重新建立连接,如果错误仍然持续,那么系统将会被硬重置。输出,指的是typec接口接的设备需要的供电(供给设备的电)是12V.2. C收到P发送的Power能力的消息后,分析P的Power能力并选择其中一个Power配置发送给P。1. P首先发起PD协商,向C发送P具有的Power能力的消息,也就是P支持哪些功率类型。
2025-08-04 17:31:40
305
原创 六、定时器中断
1.定时器就是一个计数器,当这个计数器的输入是一个准确可靠的基准时钟的时候,那它在对这个基准时钟进行计数的过程,实际上就是计时的过程。比如在STM32中,定时器的基准时钟一般都是主频72MHZ,如果我对72MHZ计72个数,那就是1MHz也就是1us的时间。T(时钟周期)=1/fosc(频率) 计时时间=n(计数次数)*T,1s/72M*72=1us72MHZ的就是1秒计72M个数,可以理解为对72个数计数1M次,计72个数的频率就是1MHz,用时1us。
2025-07-23 16:01:10
1993
原创 五、EXTI外部中断
NVIC:嵌套中断向量控制器,在STM32中,它是用来统一分配中断优先级和管理中断的。NVIC是一个内核外设,是CPU的小助手。有了中断系统之后,主程序就可以放心执行其它事情,有中断的时候再去处理。一般中断程序都是在一个子函数里的,这个函数不需要我们调用,当中断来临时,由硬件自动调用这个函数。中断系统是管理和执行中断的逻辑结构,外部中断是众多能产生中断的外设之一。NVIC只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序。CPU是医生,各个中断是病人,NVIC是叫号系统。
2025-07-21 17:31:19
277
原创 三、GPIO通用输入输出口
本节课第一部分总共有三个程序,第一个是LED闪烁,第二个是LED流水灯,第三个是蜂鸣器。带FT(FiveTolerate)的,就是可以容忍5V的端口。在STM32中,所有的GPIO都是挂载在APB2外设总线上的。其中GPIO外设的名称是按照GPIOA、GPIOB、GPIOC等等这样来命名的。每个GPIO外设,总共有16的引脚,编号是从0到15。GPIOA的第0号引脚,我们一般把它称作PA0,接着第1号就是PA1,然后PA2,以此类推,一直到PA15。
2025-07-15 11:21:43
389
原创 二、软件安装与新建工程
这就是配置寄存器的方式进行点灯的操作,可以看出来,这种方式需要不断地查手册来了解每个寄存器的每一位都是干啥的。然后,点进去,接下来给工程文件起个名字,在这里,我们可以起个通用一点的名字,这个工程是干啥的我们可以在文件夹名称说明,文件夹的名称是很方便改的,这个名称以后不太方便改,所以我们就起个Project的名称,然后点击保存。我们选中它,点击add。接下来,因为这个STM32是内核和内核外围的设备组成的,而且这个内核的寄存器描述和外围设备的描述文件不是在一起的,所以我们还需要添加一个内核寄存器的描述文件。
2025-07-14 13:39:37
932
原创 STM32嵌入式开发-JKX笔记
10-3软件IIC,手动反转两个GPIO口的电平首先建立IIC通信层的.c和.h模块,在通信层里,写好IIC底层的GPIO初始化和六个时序基本单元,也就是起始、终止、发送一个字节、接收一个字节、发送应答和接收应答。写好IIC通信层之后,再建立MPU6050的.c和.h模块。在这一层,我们将基于IIC通信的模块,来实现指定地址读、指定地址写,再实现写寄存器对芯片进行配置,读寄存器得到传感器数据。最终在main.c里,调用MPU6050的模块,初始化,拿到数据,显示数据,这就是程序的整体架构。
2025-06-18 16:33:47
555
原创 一些常见的基础知识
1.externextern表明变量或者函数是定义在其他其他文件中的例如:extern int a;显式的说明了a的存储空间是在程序的其他地方分配的,在文件中其他位置或者其他文件中寻找a这个变量。C语言extern关键字用法和理解_c extern-优快云博客2.volatile一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。volatile
2025-05-30 13:17:00
1637
原创 位的宏定义与位掩码
/currLevel:现在数据线上的电平用户给出的代码是:首先,我要理解这个宏的作用。看起来用户是想定义一个代表第9位的掩码。通常,这样的宏用于位操作,比如设置、清除或检查某个特定位的状态。接下来,我需要检查这个宏是否正确。首先,0x0200对应的十六进制值是多少呢?让我们计算一下。十六进制的每一位代表二进制(4*8=32),所以0x0200是二进制的0000 0010 0000 0000,也就是十进制的512。那么,这确实是第9位的位置,因为位计数通常从0开始。
2025-05-29 10:18:44
888
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅