- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 在keil里头文件的使用方法
总之,在使用Keil头文件时,需要注意正确引入、避免重复引入、检查依赖关系、阅读文档、更新版本、避免修改系统头文件、处理冲突等问题,以保证代码的正确性和可维护性。避免修改系统头文件:尽量避免修改系统提供的头文件,以免造成不必要的问题,可以通过定义自己的头文件来扩展功能。处理头文件冲突:如果使用的两个头文件存在冲突,可以使用条件编译的方式,对不同的头文件进行区分,以避免冲突。查看头文件文档:阅读头文件文档,了解头文件提供的函数和宏定义等信息,以正确使用头文件中的功能。在代码中使用头文件时,可以使用。
2024-03-31 21:01:08 2632 1
原创 keil的内置变量_FILE_ _DATE_
注意,这些内置变量的名称和格式在不同的编译器中可能有所不同。以上是Keil中的常用内置变量,其他编译器可能有类似的功能但使用不同的变量名。:表示当前所在的函数名和行号。该变量是一个字符串常量,格式为"function_name:line_number"。该变量是一个字符串常量,格式为"MMM DD YYYY"。这些内置变量可以在程序中使用,以获取有关当前环境和编译信息的信息。该变量是一个字符串常量,格式为"HH:MM:SS"。:表示当前所在的源文件的文件名。:表示当前所在的源文件的行号。
2024-03-30 22:15:06 1157
原创 单片机的程序里使用printf的步骤
除了基本的格式转换符外,printf还提供了许多其他的格式控制选项,如宽度控制、精度控制、填充字符等,可以根据需要进行深入学习和使用。详细的用法可以参考C语言的官方文档或相关教程。在printf中,%d、%f、%c和%s是格式转换符,用于表示要输出的数据的类型。它们与对应的变量一起使用,可以在输出时按照指定的格式打印出变量的值。printf是C语言中的一个常用函数,用于将格式化的数据输出到标准输出设备(通常是控制台)。printf是一个标准的函数,是在stdio.h里声明的,所以要添加这个头文件。
2024-03-28 21:38:02 721 1
原创 #define的用法
指令将会在编译预处理阶段将所有的标识符替换为它们的对应文本,然后再进行编译。这样可以提高代码的可读性和灵活性,减少重复代码的工作量。仅仅是一个简单的文本替换,不会进行类型检查和错误处理,因此在使用时需要谨慎考虑其副作用。是一个预处理指令,用于定义一个标识符的替换文本。它可以用来定义常量、宏和函数宏。在C/C++语言中,
2024-03-27 22:04:29 327
原创 define也会骗人的
话说老板让把两个功能模块合在一起,是一个单片机控制的那种,同时需要对各两个模块的一些参数根据新设备重新设定。身为打工人的本分,就是干杯。经过千辛万苦终于把代码整合在一起了,上硬件测试,然后发现有一个功能异常。这个功能是RFID读卡,异常现象是开机上电后,模块有天线能量输出,但是一发送读卡命令,天线就关闭了。
2024-03-27 22:00:49 1156
原创 C语言关键字详解
C语言关键字是预定义的用于控制程序结构和实现特定功能的单词,关键字在C语言中具有特殊的含义,不能用于其他目的。:用于定义一个循环体,可以指定循环的初始值、循环条件和循环末尾的操作。:用于定义一个条件语句,根据条件是否成立来执行不同的代码块。:用于定义一个循环体,只要条件满足就一直执行循环体中的代码。:用于结束当前循环的迭代,开始下一次循环的迭代。:用于定义与if语句条件不成立时执行的代码。:用于声明无返回值的函数或不带参数的函数。:用于定义switch语句中的分支条件。:用于定义常量,声明的变量不可更改。
2024-03-26 22:04:50 239
原创 控制传输和中断传输能否同时使用呢
USB(Universal Serial Bus)是一种常用的计算机外部设备连接标准,它支持多种传输方式。:控制传输是USB中最基本的传输方式,用于设备的配置和管理。它通过控制端点(Control Endpoint)进行数据传输,可以发送命令和获取设备状态等信息。:中断传输用于周期性地传输小量数据,例如鼠标和键盘输入。它通过中断端点(Interrupt Endpoint)进行数据传输,具有低延迟和实时性。:批量传输用于大容量数据的传输,例如打印机输出或大文件的传输。
2024-03-26 20:39:53 433
原创 李逵还是李鬼,串口接受数据也会遇到这样的问题吗?
设备A就会把本来的长度信息len1 len2,判断成为02 len1(李逵变成了李鬼),就是大于512字节,但是后面没有这么多数据,就一直等着等着啊。话说串口通信应该是非常稳,一对一交流,没有第三者,距离也不会太远,但是现在遇到了一个问题,通信异常了,只有下行的命令,没有返回,大有任你山风海啸我只当耳旁风的架势。设备A的数据格式是02 + 长度(数据长度,两字节表示) + 数据 + 03,其中长度和数据都是原始格式,比如有两个字节数据,长度部分就是00 02,十六进制形式。这下不让人困惑了,通信异常了。
2024-03-25 22:14:25 360
原创 单片机运行卡尔曼滤波算法的基本步骤(AI创作助手)
需要注意的是,单片机上的实现可能会有一些硬件和软件限制,因此可能需要对算法进行一定的优化和简化。同时,卡尔曼滤波算法需要对系统的动态特性和传感器噪声等参数进行准确的估计,以保证滤波效果。传感器测量更新:将传感器数据与预测的状态向量进行比较,并计算残差。初始化:设定初始状态向量和协方差矩阵,分别表示估计状态的初始值和不确定性。传感器数据读取:从传感器中读取原始数据,并对数据进行预处理,如去除噪声。返回第3步,重复进行状态预测和传感器测量更新,直到完成所有数据的处理。
2024-03-24 22:18:37 400 1
原创 关于这件事,还是想的太简单了
volatile是Java中的关键字,用于声明变量。它的作用是告诉编译器该变量将被多个线程访问和修改,因此不应该进行编译器优化,需要每次从内存中读取最新的值。具体来说,volatile的作用包括以下几个方面:禁止指令重排序:编译器和处理器在进行指令优化时,有时会对指令进行重排序,但是对于volatile变量,编译器会保证不会对其指令进行重排序。保证可见性:当一个线程修改了volatile变量的值时,其他线程可以立即看到最新的值,不需要等待缓存写回主存。
2024-03-24 22:10:04 368
原创 一个延时耗费了两天的时间
仔细读程序吧,大部分是原厂提供的驱动,读着读着发现有部分是可以(xue yao)自己改动的一个函数----软件延时函数。按照注释里要求的时间,重新写了这部分代码,保存、编译、下载、运行,一路丝滑到底啊。起初怀疑是更新的程序有问题,就恢复到原始代码重新编译,问题依然存在,奇怪是原始的生产程序,机器正常了。后来想可能是和之前使用的编译器版本不同,导致延时函数产生的延时缩小,对外部芯片操作时序不达标,而引起的外部芯片没有正确初始化,进而不能正常工作导致的问题。使用打log,点灯,最后上了终极手段—仿真,然并卵。
2024-03-21 22:06:49 263
原创 phpalSli15693_ActivateCard()读取多张15693卡片
使用phpalSli15693_ActivateCard()同时读取多张15693卡片
2023-10-31 22:35:31 98
原创 2020-03-19
公司在三层楼的顶层。这段时间都是自己带饭中午吃,洗碗的地方和洗手间很近。有时去洗碗时,随便去趟洗手间。这样就会想先洗碗还是先去洗手间呢。当然,先去哪个都可以,这两个没有什么相关性,但是三层的水压不太好,如果先去洗手间,冲水后,水龙头的水流就特别小,洗碗就很烦。有时,似乎没有关系的事,却因为经常忽略的因素联系在一起。...
2020-03-19 08:25:23 88
STM32U073数据手册
2024-03-27
STM32U031系列数据手册
2024-03-27
AN4894 How to use EEPROM emulation on STM32 MCUs
2024-03-26
RC663移植到STC32G/F读取15693卡片
2023-10-30
STM32-iap-usart.7z
2019-10-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人