自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (8)
  • 收藏
  • 关注

原创 STM32单片机编程中标志变量的思想无处不在

本文探讨了STM32编程中标志变量的两种典型应用方式:软件定义标志变量和硬件标志寄存器操作。作者通过具体代码示例展示了静态局部变量作为软件标志的应用(如控制USART_ClearITPendingBit()的单次调用),以及硬件标志寄存器在中断处理中的自动设置/清除机制(如TIM中断标志的硬件自动置位和软件清除)。特别指出某些硬件标志的清除可能隐含在寄存器访问中(如USART DR寄存器的读取会自动清除中断标志)。文章揭示了标志变量在嵌入式系统中的通用性,强调了理解硬件自动操作机制对正确编写中断服务程序的重

2025-06-03 22:36:00 232

原创 关于单片机STM32程序本质是并行运行,关于代码洁癖的一些思考

本文分享了STM32单片机编程的两个核心心得:1) STM32程序本质上是一种"宏观并行"结构,由while(1)主循环(最低优先级)与多个中断服务程序并行运行,通过全局变量实现数据交互;2) 合理使用描述性变量(特别是结构体形式的副本变量)虽会占用更多内存,但能显著提升代码可读性和维护性。作者通过系统定时器中断、串口中断与主循环的交互实例,以及按键处理结构体的设计,阐述了这些实践方法既能降低编程复杂度,又符合嵌入式系统实时性要求。

2025-06-02 11:15:11 277

原创 vscode使用“EIDE”和“Cortex-Debug”插件利用st-link插件实现程序烧写以及调试工作

本文章记录了vscode使用EIDE和Cortex-Debug插件,在使用st-link情况下,如何实现调试工作

2025-06-01 12:08:31 645

原创 解决vscode打开一个单片机工程文件(IAR/keil MDK)因无法找到头文件导致的结构体成员不自动补全问题。

摘要:本文介绍了在VSCode中编辑STM32标准库项目时,解决结构体成员无法自动补全问题的方法。主要步骤包括:1)检查C/C++插件配置;2)通过命令面板生成c_cpp_properties.json文件;3)从Keil工程文件中获取IncludePath并添加到配置中;4)添加必要的宏定义(如STM32F10X_MD)。最终通过正确配置头文件路径和编译宏,解决了VSCode无法识别头文件导致的代码补全问题。该方法同样适用于IAR工程。

2025-05-31 23:09:27 425

原创 vscode使用EIDE插件使用jlink创建调试环境

摘要:本文介绍了在VSCode中使用EIDE和Cortex-Debug插件开发ARM嵌入式系统的完整流程。主要包括:1)安装必要插件;2)配置工具链路径;3)导入Keil MDK工程;4)设置构建和烧录参数;5)通过J-Link调试器进行烧写。重点说明了launch.json文件的配置要点,包括elf文件路径、芯片型号指定以及SVD文件配置等。该方案实现了在VSCode环境下完成代码编译、烧录和调试的全流程操作。(149字)

2025-05-31 22:25:02 316

原创 keil MDK优化等级影响LED呼吸灯正常运行

会一直在while(1)中死循环,但是全局变量SysTickCntMs在systick中断服务函数中不断递增。后来发现是因为我修改了优化等级,原先默认是-O0,修改后,再次编译,延时函数能成功运行。今天遇到了一个设置keil MDK优化等级造成程序不运行的问题,做此记录。最初,我将优化等级设置为了“default”,我发现写的阻塞延时函数。

2025-05-28 22:52:35 191

原创 keil MDK中阻塞延时函数和非阻塞延时函数记录

while (1)死循环中调用block_delay_ms(LED_DELAY_NMS);函数block_delay_ms()中使用了while循环去比较SysTickCntMs - start的差值与ms的关系,当退出block_delay_ms函数的时候就是时间到了。nonblock_led_delay_nms()函数内部,首先做了初始化赋值操作,然后通过2次if判断完成计数值-1操作和nonblock_delay_flag判断,都是最常规状态变量(标志变量)的操作。希望对大家有所帮助。

2025-05-28 22:34:26 185

原创 keil编程函数内部静态局部变量之前不能有代码段

今天我用keil MDK编写一个在SysTick中调用的子函数nonblock_delay_ms(),为了优化封装,使用了静态全局变量,发现一个想象就是,使用static修饰的静态全局变量前面不能有代码段,否则会报错误:..\User\main.c(59): error: #268: declaration may not appear after executable statement in block。发现将代码段放到静态全局变量的后面就不会报错了。最后,这种情况也是会报错了。

2025-05-28 18:13:18 142

原创 关于全局变量定义和初始化使用2行代码实现

文章介绍了Keil中全局变量定义和初始化的两种写法:常规写法是在定义时直接初始化,如"u8 global_variable1=10";另一种写法是将定义和初始化分成两行,如先声明"u8 global_variable1",再赋值"global_variable1=10"。需要注意的是,第二种写法必须重复变量类型和static修饰符,否则会报错。这种写法虽然不常见,但编译器允许,为开发者提供了一种灵活的变量定义方式。

2025-05-28 17:31:18 93

原创 STM32F103C8T6在使用PB3引脚当做按键的与JTAG接口引脚冲突问题?

我查原理图也没发现PB3引脚复用情况,后来我发现是引脚标注库中的GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE)这条代码屏蔽掉了,这条代码的意思是当使用烧写方式是SWD时需要关闭JTAG功能,我测试了一下,开启这行代码后,PB3 PB4的2个按键都能正常工作。我发现使用PB4引脚当按键按下或者弹开的时候是没有任何问题的,但是将引脚改成PB3,当按键未按下的时候会莫名其妙的认为按下了,而且我用万用表测试PB3高低电平变化也是正常的。

2025-05-27 22:54:23 174

原创 STM32标准库中芯片选择后预处理宏STM32F10X_MD或者STM32F10x_HD已经默认了定义了

解决方法也很简单,将startup文件改成MD字样的startup_STM32F10X_MD.S,在魔数棒的预定义中写入STM32F10X_MD。我找了很久,发现是因为在魔数棒中选择芯片的时候是选择了“STM32F103C8T6”,于是keil MDK默认定义了STM32F10X_MD,于是冲突了。今天我在一直一个STM32F103C8T6的实例的时候遇到了一个很有趣的问题,希望对大家遇到同样问题能够有所启迪。虽然是小问题,但是我找了好久,因为我一直没没找到STM32F10X_MD这个宏是哪里定义的。

2025-05-26 23:21:08 280

原创 单片机或嵌入式开发过程中对函数指针和回调函数的一些思考

本文探讨了回调函数的概念及应用。回调函数是间接调用的函数,通过函数指针实现。文章分析了函数指针的三要素(类型、实例化、解引用),并给出示例代码。使用回调函数可以实现程序分层和模块化设计,降低耦合度,便于扩展维护。文中通过按键处理的案例,展示了如何通过中间层间接调用硬件驱动层,而无需修改中间层代码。最后比较了函数指针与变量指针的异同。回调函数是软件工程中实现松耦合的重要手段。

2025-05-25 12:43:05 262

原创 STM32F091CBT6单片机的实际flash大小比芯片手册的要一倍

所以我那个同事写的代码是没有问题的。(我是这样想的,不保证)。我在拜读以前一个离职同事写的代码的时候发现他利用了芯片内部flash用于存储一些掉电后不丢失的数据,但是我看到他利用的flash空间地址从0x0802_0000开始的,我就很纳闷,0x20000的大小不就是128KB吗?今天和大家分享一件很有意思的事情:就是我使用的单片机型号为STM32F091CBT6,芯片手册中的flash大小为128KB,但是我要说的是此芯片内部大小实际是256KB,也就是0x0800_0000~0x0840_0000。

2025-05-24 14:18:21 273

原创 STM32L412CBT6芯片中使用ADC1采集2路模拟量

定义一个全局变量,并调用adc_start_dma()后,ADC就源源不断的网这个全局变量数组ADC_ValueDMA[SAMPLE_MAX_NUM][ADC_CHANNEL_NUM]中存储,我们后面只需要处理这里面的数值即可。在使用单片机STM32L412CBT6的ADC1模块的IN9和IN10采集模拟量的数值ADC数值,使用STM32cubemx中的相关配置,做本文章以作记录。注意这里没有开启ADC的中断,我测试过假设只有一路ADC中断,可以使用ADC中断处理。现在是2路,所以需要开启DMA功能。

2025-05-24 12:40:42 233

原创 什么时候可以使用阻塞延时函数呢?

文章探讨了阻塞延时函数的适用场景,认为在短延时(如500ms以内)情况下,阻塞延时写法简洁高效,且不影响用户体验。作者以uboot源码中的udelay()函数为例,说明其通过获取当前时间戳并循环比较实现短时阻塞延时的机制。分析发现uboot最多延时50ms,远低于人类感知阈值,因此可以放心使用。文章结论:在延时时间短于人眼反应速度的场景下,开发者可大胆采用阻塞延时方式。

2025-05-24 10:51:14 317

原创 STM32单片机编程中使用标志变量解决某段代码在while(1)中只调用一次(有点像初始化)。

文章摘要:作者在STM32编程中遇到非阻塞延时问题,最初使用定时器中断和标志变量方法,但发现由于主循环运行时间过长导致延时失效。通过引入static标志变量fist_run控制初始化时机,确保仅在第一次循环时重置延时参数,从而精确实现3秒非阻塞延时。该方法类似状态机思想,有效解决了延时精度问题,同时不影响后续代码执行。文章分享了标志变量的灵活用法,对嵌入式系统时序控制具有实用参考价值。(149字)

2025-05-23 22:00:50 245

原创 STM32单片机关于如何非阻塞的实现长时间延时的一些思考

本文章主要对尽STM32单片机中实现长时间(秒级别)延时的集中算法。希望对大家有所帮助。

2025-05-22 21:45:23 239

原创 ubuntu中使用trash工具替代rm防止删除后无法恢复

4、测试: rm命令直接将文件或者文件夹删除到了回收站;rl命令:查看回收站列表;rr命令:恢复删除的文件或者文件夹,根据输出的列表输入相关数字;re命令:将整个回收站清空。在ubuntu中如果使用rm命令会将文件或者文件夹直接删除掉了,但是无法还原,现在有一种方法就是使用trash相关命令替代rm命令。3、source ~/.bashrc 让改动有效。# rr:还原,输入准确数字。# rl:查看回收站列表。2、给rm起一个别名。# re:清空回收站。最后 wq保存并退出。

2023-08-30 09:45:30 485 1

原创 今天去广州出差,我希望能够一切顺顺利利的

希望一切安好

2021-07-07 19:17:42 180

转载 IAR和KEIL同时使用一套代码时的注意事项

1.  设置设置KEIL的Use MicroLIB;设置IAR里的Library Configuration---Library为Full; 2. 效果 0x708,0x70a是IAR程序下载到从站,从站启动发的启动报文;0x709,0x70b是Keil程序下载到从站,从站启动发的启动报文。3. 结论现在已经可以实现同一套代码使用两种软件编译,下载并执行。...

2018-04-04 15:04:12 2402 1

原创 IAR常用快捷键

Find and Replace>Find:查找 Ctrl + FFind and Replace>Find Next:查找下一目标 F3Find and Replace>Find Previous:查找上一目标 Shift + F3选中{}中所有内容:Ctrl+BNext Error/Tag:显示下一错误/目标 F4Previous Error/Tag:显示上一错误/目标 Sh...

2018-04-04 11:57:17 1061

MAX14972中文资料

MAX14972双通道超高速USB 3.0均衡器/转接驱动器采用可编程输入均衡和输出去加重,有效降低确定性抖动以及信号重建电路板造成的损耗或电缆损耗,有助于对超高速USB 3.0关键元件的布局进行优化,并可使用较长的电路板走线或电缆。器件具有高级电源管理功能,带有接收器侦测功能,完全支持USB 3.0低频周期信号(LFPS)。

2014-03-20

lenovo Z470 BIOS Update 安装包(32位和64位 独显或集显)

lenovo Z470笔记本电脑在win7操作系统下选择“睡眠模式”重新启动后硬盘访问速度变得非常慢,电脑变得非常卡。本人经过查询知道是由于Flash存储器中BIOS存在bug。国内lenovo官方网站无法下载最新BIOS升级包,特意从美国联想公司官方网站下载下来分享给大家。注意:升级时一定要安装电池,安装过程中不能断电。有三个wph文件,本人选择是第一个4ACN38WA.wph,升级后完全没问题。如果选用4ACN38WD.wph升级后不能使用独立显卡。希望大家特别注意这一点。

2013-08-21

EDA365_Skill_Package_V2.4

直接双击安装(最好是将360安全卫士、360杀毒关闭)直到最后一步点击完成,打开allegro软件后,会自动加载到菜单栏。(本软件不得用于商业用途,仅做学习交流)

2018-04-02

CR1220电池底座

CR1220电池底座封装画起来比较麻烦,自己画了一个封装分享给大家,可以直接拿来用

2018-08-04

Cadence高速电路板设计与仿真(信号与电源完整性分析第4版).part1

本书基于cadence 16.3以具体的高速PCB为案例,详细讲解了IBIS模型的建立、高速PCB的预布局、拓扑结构的提取、反射、串扰、时序、约束驱动布线,后布线DRC分析、差分对设计等信号完整性分析,以及目标阻抗、电源噪声、去耦电容器模型与布局、电源分配系统、电压调节模块、电源平面、单节点仿真、多节点仿真等信号完整性分析内容。

2015-10-22

Cadence高速电路板设计与仿真(信号与电源完整性分析第4版).part2

本书基于cadence 16.3以具体的高速PCB为案例,详细讲解了IBIS模型的建立、高速PCB的预布局、拓扑结构的提取、反射、串扰、时序、约束驱动布线,后布线DRC分析、差分对设计等信号完整性分析,以及目标阻抗、电源噪声、去耦电容器模型与布局、电源分配系统、电压调节模块、电源平面、单节点仿真、多节点仿真等信号完整性分析内容。

2015-10-22

cadence高速电路板设计与仿真(第四版)项目文件.part1.rar

本书基于cadence 16.3以具体的高速PCB为案例,详细讲解了IBIS模型的建立、高速PCB的预布局、拓扑结构的提取、反射、串扰、时序、约束驱动布线,后布线DRC分析、差分对设计等信号完整性分析,以及目标阻抗、电源噪声、去耦电容器模型与布局、电源分配系统、电压调节模块、电源平面、单节点仿真、多节点仿真等信号完整性分析内容。 本部分对应数据中对应的项目文件

2015-10-22

cadence高速电路板设计与仿真(第四版)项目文件.part2.rar

本书基于cadence 16.3以具体的高速PCB为案例,详细讲解了IBIS模型的建立、高速PCB的预布局、拓扑结构的提取、反射、串扰、时序、约束驱动布线,后布线DRC分析、差分对设计等信号完整性分析,以及目标阻抗、电源噪声、去耦电容器模型与布局、电源分配系统、电压调节模块、电源平面、单节点仿真、多节点仿真等信号完整性分析内容。 本部分对应数据中对应的项目文件

2015-10-22

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除