- 博客(19)
- 收藏
- 关注
原创 keil: error:“xxxx.h“ file not found’’ 找不到.h文件解决方法
Option->C/C++->Include Paths,添加提示缺失的文件所在路径。文件添加到了工程目录但提示“file not found”原因:仅添加到目录但未包含编译文件的路径。先找到所缺失的.h文件再哪个位置。打开你keil文件所在的文件夹。
2023-10-19 12:04:38
45875
24
原创 keil5中代码联想:Ctrl+Alt+空格无法联想出提示
但是我碰到了一个问题,中途输错了,那么得删除完这个单词,重新输入,才会出现提示。对此,有个默认快捷键(然而无法在快捷键中设置的)ctr+alt+空格,可以手动控制出现代码提示。跟着课发现联想很快的就可以把代码补全,还不用手动输入,一是手动输入很浪费时间,二是手动输入很容易输入错误,下面我们解决这个问题。快捷键刚好会发生输入法切换,导致代码提示不出来了,因此我们需要关闭系统中该快捷键导致的输入法切换,如下图:鼠标右键,按键设置。把代码补全设置为1-2个字母,这样每敲一到两个字母,都会出来提示了。
2023-08-29 10:32:50
15232
11
原创 C语言中:使用标准符号从函数中返回结构体与使用标准符号从函数中返回结构体
定义的数据结构往往包含多个数据成员,导致内存占用很大。现在,在函数之间传递比较大的结构时,最好使用指针。指针作为对象的一个句柄,无论那里存储的是什么结构,它的大小都是固定的。定义,那么对于函数声明来说将是一个更简洁的符号。它将为给定的结构关联一个新的类型别名,我们只需要在函数原型中指定新的别名即可。现在,C 语言中的函数可以返回类似于内置数据类型的。,有可能减少内存流量,使代码的性能更高。对象的指针,并按值返回相同的对象。在下面的示例代码中,我们实现了一个。的指针时,我们需要使用。
2025-07-04 08:44:31
321
原创 C语言中:将结构体名写在函数前面表示这个函数返回一个该结构体类型的值
可以这样使用在C语言中,返回结构体是合法的,但是要注意返回结构体会发生值拷贝(即整个结构体的内容会被复制到接收的变量中)。如果结构体很大,可能会有效率问题。因此:在这种情况下,可以考虑返回结构体指针(但要注意指针指向的内存生命周期)或者使用输出参数(通过指针传入结构体地址,在函数内填充)。另外,在C语言中,结构体作为函数参数和返回值时,都是按值传递的。所以上面的函数返回的是整个结构体的副本。
2025-07-03 15:42:23
337
原创 MAVLINK包的校验方法,看了好多都没用,最后用这个人的解决了
2、首先说这个校验方法,之前不知道从哪里看到的说是用CRC16CCITT校验,看到官方的才发现原来是CRC-16/MCRF4XX。3、然后再说最关键的,校验计算的时候不但要算进去收到的1-n+6范围内的数据,还要加上一个CRC_EXTRA,而这个东西的值是从如下数组中取得的,对应的序号是收到数据包中的Messa ID字节+1。图里字有点小,放大可以看到,最后两个字节是校验码,然后校验方法是CRC-16/MCRF4XX,校验范围是1-n+6(即除去包头和校验字节)再额外加上一个叫 CRC_EXTRA的东西。
2024-04-02 11:30:32
653
2
原创 STM32基于HAL库配置IIC采集AHT20的温湿度
在启动传输后,随后传输的I2C首字节包括7位的I2C设备地址 0x38和一个SDA方向位 x (读R:‘1’,写W:‘0’)。在第8个SCL时钟下降沿之后,通过拉低 SDA引脚 (ACK位),指示传感器数据接收正常。在发出初始化命令之后 (‘1011’1110')代表初始化,‘1010’1100’ 代表温湿度测量), MCU必须等到测量完成。注意:图中标注设备地址:0x38,后面再加上一位读写位也就是 0111000 0/1(0x70 0x71)
2023-09-26 10:37:30
3001
1
转载 GPIO_MODE_IN_FLOATING用HAL库改写
GPIO_Mode是其中的一个成员,表示GPIO的工作模式。也就是说,这个GPIO引脚是用于输入信号的,但是没有上下拉电阻,因此在外部没有连接任何电源或地时,它的电平状态是不确定的,可能会出现漂移。来初始化GPIO口。此函数需要指定GPIO口所在的GPIO端口(例如:GPIOA.GPIOB等),以及GPIO口的初始化参数(例如:GPIO_Pin、GPIO_Mode等)。在本示例中,我们将GPIOA的Pin0口初始化为输入模式,工作速度为50MHz。这是一行针对STM32的代码,用于配置GPIO的工作模式。
2023-09-19 13:51:43
1608
原创 STM32 HAL库配置 NVIC Settings 作用
b:TIM15 Global Interrupt 是TIM1的全局中断,包括更新(Update)事件、触发和复位(Trigger and Commutation)事件以及捕获/比较(Capture/Compare)事件。TIM1 Capture Compare Interrupt 是在定时器捕获/比较(Capture/Compare)事件发生时触发的中断。这个中断通常在使用定时器作为PWM控制器时触发。a:TIM1 Update Interrupt 是在定时器更新(Update)事件发生时触发的中断。
2023-09-18 16:19:13
6712
2
原创 STM32的CRL CRH ODR BRR BSRR寄存器(逐句解析)
管脚为高电平,写 0 则为低电平。不过缺点是:会因中断而打断,关闭中断明显会延迟或丢失一事件的捕获,所以控制GPIO的状态最好还是用BSRR和BRR。也就是说每一个框内设置的都是00:输入模式 01:浮空输入模式。既然ODR 和 BSRR都用于控制GPIOx的输出高电平或低电平,为什么有了。也就是说既能控制管脚为高电平,也能控制管脚为低电平。寄存器改变引脚状态的时候,不会被中断打断,而。的相关工作模式和工作速度,它们通过不同的。GPIOx 的输出高电平或者低电平。GPIO 口的工作模式和工作速度。
2023-09-13 21:20:10
7061
2
原创 STM32-HAL库-printf函数重定向(简单易懂亲测有效)
由于STM32cubemx生成的HAL库代码没有printf,为了让这个函数能实现打印功能,我们必须要把这个函数重定向,让它重定向到串口中,把要输出的内容打印到串口中。
2023-09-07 21:07:58
18754
10
原创 STM32单片机keil软件美化,绿色护眼参数
找到keil安装的位置打开UV4找到global.prop,把我下面的这些代码用记事本打开复制,替换上图中的global.propfold.cpp=1use.tabs=0tabsize=4autosave=0\\\\\r\n";\\\r\n";;\\\r\n";\\\\\r\n";\r\n}";\\\r\n";\\
2023-08-21 18:18:36
741
1
原创 STM32定时器计算
那么72 000 000/7200 = 10000HZ = 10KHZ;所以 500ms要计算5000次,才是0.5s;Tclk:定时器的输入时钟频率为 72 000 000HZ。Tclk:定时器的输入时钟频率(单位MHZ)Tout:定时器溢出时间(单位为us)有些小白可能看这么多也不知道是什么意思。也就是说要计数10000才是1s。
2023-08-21 15:14:38
784
1
原创 STM32G431单片机,多通道采集ADC电压值(DMA方式)
我用的是ADC1,通道分别是CHANNEL 1 CHANNEL 2 CHANNEL 3。三个通道的数值,有点难看,凑合看,自己打的时候可以\r\n分一下行。CUBEMX配置如图所示。DMA配置如图所示。
2023-08-11 14:34:01
3087
2
原创 STM32CubeMX配置中 auto-reload precload(自动重装载预加载)
"Auto-reload Preload"(自动重装载预加载)用于控制PWM模块在计数器溢出时是否自动加载已预先加载的值。当"Auto-reload Preload"禁用时,称为"Disable",当它启用时,则称为"Enable"。启用它可以提供更稳定的输出信号和实时更改自动重装载值的能力,但可能需要更多的内存空间。2.每个计数周期的比较值(比如占空比)在计数周期开始时就已确定,无法在计数周期中动态更改。3.每个计数周期的比较值(比如占空比)可以动态地更改,提供更大的灵活性。
2023-08-11 11:32:18
5661
1
空空如也
但是上面的大文件夹还有小雪花,会影响整体代码吗
2025-07-22
keil编译出现未改变三个字是什么原因呢
2025-07-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅