自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Error: Flash Download failed - “Cortex-MO+“ 极海APM32F072系列烧录错误

解决KEIL烧录出现Error: Flash Download failed - "Cortex-MO+"的问题,更具体地错误信息是Erase Failed,借用J-Flash Erase,再回到Keil可以恢复烧录。

2024-09-02 14:19:01 708

原创 使用J-LINK COMMANDER检查极海APM32F072烧录

如果要选Default选项可以直接回车,不然就键入提示的选项。此时会显示默认设备,如果之前设置过会有,为了演示,我不选。这个方法可以检测连接是否正常,辅助Keil烧录分析。那么关闭窗口重新打开,再来一遍,这次键入SWD。

2024-06-03 19:27:32 216

原创 极海APM32F072用Keil5烧录失败Error: Flash Download failed -“Cortex-MO+“

再用J-link Commander, 也是一样显示Flash is read protected.又是老问题了,记得以前用J-Flash,点击否,不允许解除读写保护,反而是可以的。1.点击解除读写保护,等待一段时间,最后显示不能下载文件。再验证一下吧,重新取消够选择这个选项,是不是就不行了呢?2.点击不接触读写保护,也是显示不能下载文件。但是可以烧录了,谢天谢地了,不管了😑!见了鬼了,真的搞不懂是为什么!☑️它,竟然可以烧录了!检查了一圈设置,都搞不好。

2024-06-03 19:01:11 343

原创 嵌入式开发中C语言的浮点数处理问题(2)

Casting with : Using : Combining with : In the context of the function, using ensures that is rounded to the nearest integer before casting it to an . This is because adding 0.5 to a number and then applying effectively rounds

2024-05-17 16:10:56 603

原创 嵌入式开发中C语言的浮点数处理问题(1)

其实就是转换的问题,导致了误差的累积,精度丢失了。这涉及到 (int)转换, floor函数,还有(int)floor函数的用法,另开一篇写吧。给CC1101写寄存器,根据用户指定的Frequency deviation,按公式计算。但是有些小问题,具体表现为当输入的f_dev精度不一样是,计算出的寄存器值差了一个数。借ChatGPT生成的代码,把f_dev定义为了double,测试了下,是可用的。这是不可接受的,所以问了下ChatGPT,给我改善了下。

2024-05-17 16:03:32 387

原创 C语言没有四舍五入?

也就是说采用+0.5 再用floor函数的方法可以四舍五入,或者用结构体分别保存整数和小数部分。

2024-05-17 10:46:39 783

原创 RTT Viewer 打印浮点会有精度问题,请改用串口打印

于是怀疑是和RTT 打印有关,因为毕竟官方没有支持浮点打印,是网友想出的办法,(虽然我参考的博文说实现了打印小数点后面6位,但可能值是不准确的。是有点离谱的,具体没有费心去分析。通过用户输入的想设置的载波频率,反推FREQ寄存器的值(24bits,实际是FREQ2/FREQ1/FREQ0三个寄存器)。GEMINI生成的代码,用了double作为形参, 虽然我觉得不是很有必要,但还是留下了,然后测试,弄CC1101的频率设置问题,给用户实现一个函数,用户可以指定载波频率,然后在函数里设置这个频率。

2024-05-16 17:23:35 740

原创 J-LINK导致KEIL卡死后的一系列问题

但是装完后,编译出现问题,错误提示 #pragma import之类重定向的代码有问题 ,Arm compiler 6 不支持这部分代码,原因是这个用法是属于5系编译器的,但是这个版本的KEIL弃用了Arm compiler 5(在Target 👉Code Generation里面会提示Missing),用Arm compiler 6就会对代码报错。博主的情况是添加后没有用,然后把Arm compiler 5 编译器复制到Keil的安装目录下,移除之前添加的,重新在Keil里设置新复制的路径,还是没用。

2024-04-26 18:25:40 1594 2

原创 STM32程序 关于Semhosting(半主机)和Microlib 以及Printf的关系

在Keil中调试STM32程序,编译烧录后,发现程序不能运行,Main函数中点亮LED灯的语句没起作用,说明没有进入Main函数。用Keil调试的时候,虽然设置了Run to main(),但发现确实进入不了Main函数。也就是程序烧录后其实无法进入Main函数运行。(这个和Semihosting的机制有关,后面再解释)想到自己是因为调试的需要,,所以怀疑是这个问题,然后倒腾了下,勾选了Use MicroLIB:烧录后,发现程序就可以运行了,Printf也有输出。

2024-04-12 11:54:40 1274

原创 Keil 出现 “access to xxx was denied” 错误

电脑重启后再打开工程,发现程序能烧录进去开发板,但是却无法运行,LED灯不亮,程序中有亮灯的代码,说明没有运行程序,再用Keil调试发现根本进不了main函数,(已经在魔术棒中设置run to main() ),于是问同事,说是可能跟bootloader有关系,但是后来烧了一个原子的跑马灯例程,可以正常运行,所以bootloader不是原因所在,后来想到启动文件这个问题。以为是级数的问题,为了验证这个猜想,所以在另一个OK的工程里往深了建文件夹放置启动文件,然后添加到工程里,但是建了好几级还是可以。

2024-04-08 17:34:22 1918 4

原创 VMware启动显示“打开虚拟机时出错: 获取该虚拟机的所有权失败”

提示框(忘截图了)里提示目录C:\Users\mosep\Documents\Virtual Machines\VM-Win10 x64\中的某个文件(在我这里好像是VM-Win10 x64.vmx,VM-Win10 x64是我给虚拟机取的名字)在被使用中。有了这个文件,打开虚拟机软件的时候,系统就会判断该虚拟机为打开状态,使无法运行。原因是电脑出故障,最近总是在使用虚拟机的时候死机重启,属于未正常关闭。找到这个目录,删除.lck文件夹,再启动虚拟机就可以了。虚拟机的硬盘和自己电脑的主机是共享硬盘的。

2024-04-08 13:36:12 831

原创 STM32驱动CC1101时的正确配置和一些遇到的坑

STM32驱动CC1101碰到的坑,希望此记录分享有所帮助。

2024-03-21 21:00:56 1254

原创 在VSCODE中用make编译工程提示“/usr/bin/sh: -c: line 1: syntax error near unexpected token `(‘”错误

这个提示看上去是说有语法错误,错误的 `(' 符号,

2024-02-26 10:31:38 679

原创 VSCODE include错误 找不到 stdio.h

再选择“Use gcc.exe ”(后面的Found at D:\Program Files (x86)\mingw64\bin\ 是因为我的MinGW是安装在这个目录,添加到系统环境变量后,这里就侦测到了)其实,用"ctrl + ,"命令,打开设置,搜索“intelli”,点击 “IntelliSense”, 在右边出现的 Intelli Sense Mode中选择,应该也是一个道理。Ctrl + Shift + P 打开命令面板,这样, 错误提示就没了。

2024-02-23 17:19:25 2186

原创 MinGW安装了,CMD执行 gcc --version却提示 ‘gcc‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

填入你的MinGW的安装路径,我的是D:\Program Files (x86)\mingw64\bin。打开CMD窗口(如果之前打开了,先关闭重新打开),就有了。点击确定,确定,确定(所有设置窗口都确定,关闭)主要原因在于MinGW的环境变量缺失了。打开设置,键入 “环境变量”点击编辑系统环境变量。

2024-02-23 16:19:29 1788

原创 CLion的bundled MinGW能用在VSCode上吗?

下次研究下VSCode配置MinGW,以及如果用CLion中的Bundled MinGW有没有用。但是我想用CLion,想起之前在用CLion配置STM32开发环境时,有一个Bundled MinGW。这个工程独立于IDE, 只要安装了arm-none-eabi-gcc 可以用来编译就行。看里面链接到了哪些文件,然后自己手动写了Makefile,建立了一个新的工程。官方提供的SDK中的例程有 Eclipse/ Keil/ IAR 版本。跟着前辈做一个项目,用的极海的MCU,主要用到SPI和USB功能。

2024-02-23 15:59:54 528

转载 关于STM32定时器中TI1FP1 与TI1FP2及相关话题

除了基本定时器外,每个高级定时器或部分通用定时器都可以产生4对中间信号,分别是TI1FP1 与TI1FP2,TI2FP1 与TI2FP2,TI3FP3 与TI3FP4,TI4FP3 与TI4FP4,即每个输入通道可以生产1对信号。不可否认,STM32的定时器功能非常强大,定时器资源很多,参考手册中描述它的文字篇幅也相当大,不过有些细节地方讲得差强人意。TI2的电平为高,则计数器向下计数。输入通道,经过输入滤波和边沿检测器后所产生的具有相同特征的信号,然后映射到不同的输入捕捉通道,本质上还是同一路信号。

2023-12-29 14:29:21 942

原创 The CMAKE_CXX_COMPILER arm-none-eabi is not a full path and was not found in the PATH

实际上我的错误提示应该是CMakeList.txt的第17行,而不是229。解决办法是安装gcc-arm-none-eabi。这时候刷新CMake,可能还是一样的错误。

2023-11-22 17:10:05 727

原创 Hyper-V 启动黑屏的解决办法

Hyper-V 虚拟机启动系统黑屏,把显卡禁用掉,关闭虚拟机并重新启动即可。

2023-11-08 10:19:24 3265

原创 CLion 调试 STM32工程出现错误“Unexpected command ine argument:”

转换成CLion之后,编译烧写成功,但像之前在Keil中一样,出现了花屏(之前在用Keil的时候,我调试出是需要Clear 清屏的)意思是意外的命令参数,再看后面明显是 Program Files被截断了,盲猜是不支持路径中有空格导致的。重新安装(其实不需要安装,解压OpenOCD的压缩包,然后拷贝到一个没有空格的路径就行)Run/Debug的配置里,开发板配置文件这里变蓝,就表示检测到了,找不到会显示红框。但是调试没有经验,不是很会,还得继续学习。

2023-11-07 17:27:20 467

原创 调试出现“ /bin/sh: 1: Syntax error: “(“ unexpected ”

可能因为不是致命错误,所以没有显示红色,但仍然是个error,看提示这个错误造成的结果应该是最后elf文件没有正确生成。可是文件夹名用括号不是很正常吗,至少windows下是这样,看来linux环境有许多需要注意的。

2023-11-07 14:00:10 1100

原创 CLion配置WSL工具链

使用WSL 作为CLion嵌入式STM32 开发的工具链,遇到的一些配置问题记录。

2023-11-06 15:46:32 1981

原创 WSL安装过程(配合CLion使用)

为CLion配置WSL编译环境做准备

2023-11-03 10:47:52 250

原创 我为什么放弃cygwin 尝试使用WSL

中文的支持问题把人搞死,继续探索,权当积累错误经验学习了。

2023-11-03 09:48:14 267

原创 CLion工程丢失了CMake窗口

起初也没有效果,然后同事说我这个工程打开的方式好像有点不对,他就关了,关闭工程重新打开,他是通过File →Open这种方式打开,貌似重新打开后就好了(好像是右键了CMakeLists.txt,有Reload选项,然后出现了CMake窗口,记不清了)。我是习惯先在资源管理器找到工程,进入目录,然后右键打开👇(还特意网上找了个方法修改注册表使右键菜单有这个选项),一直使用下来也都没有什么问题。所以他重新打开后就好了,那之前是哪里不对也不知道,是我这个右键打开的方法真有问题?还是那个清理缓存起作用了?

2023-11-03 09:13:45 1338 2

原创 CLION 调试野火STM32工程

还是和前几天一样,把工程转换成CLion,因为试过了,Clion创建STM32工程的时候,不支持中文名,但为了和野火的对应,所以我是这么命名的: LCD_Display_CN_EN(FontLib_In_Flash)。则显示build都不成功,而此前其实我已经build成功并生成过 abcde.elf文件,所以它是不检测的,run应该是建立在现build的基础上。作为一个小白,再稍稍研究下,打开Run 配置,虽然target那里没法选择,与17行的名字锁死了。

2023-11-01 19:42:01 124 1

原创 STM32野火keil 工程用CLion创建模板

这两天尝试用Clion修改原来 野火霸道V2开发板 的Keil例程工程,碰到好多问题,总算跑通了,可以正常编译下载,串口打印。这些碰到的问题都记录在之前的文章里。最后我得到了这个工程,将它命名为F103_Template(红色部分是下载到开发板成功时的控制台日志):我这个跑通的CLion工程是在原来的 USART1接发 Keil工程的基础上转换过来的。日后继续看B站视频,但要用Clion学习其他没有学完的例程。所以配套的Keil例程都要转换成CLion工程。

2023-10-28 17:08:34 546

原创 CLion 野火STM32 工程 printf问题

提示:error: 'stack_ptr' undeclared (first use in this function);这份syscalls.c唯独缺了这个函数定义,所以只有这个提示,没有加入syscall.c文件的时候,还会有很多其他函数未定义的提示。在main.c文件中包含retarget.h,并调用RetargetInit(DEBUG_USARTx);用CLION 构建STM32的工程,用的是ARM_GCC, Keil用的是ARMCC。然而build的时候却出现问题,提示。

2023-10-27 17:01:43 408 1

原创 调试出现 “undefined reference to `_sbrk‘ ”

printf出问题,这也正好说明了用CLion配置STM32嵌入式工程的时候,如果想跟Keil一样实现printf打印到串口,是需要进一步进行设置的。搜索一圈看到有博文说是printf的问题,因为底层缺少实现函数。可以参考阅读下列文章的3.8节 “解决串口printf()问题”注释掉main函数里的 printf语句就可以编译通过。具体是什么还不太清楚,底层原理的东西了解得太少了。

2023-10-25 16:13:27 311 1

原创 CLion 编译下载 STM32程序

接上篇文章,弃用Keil,配置CLion编译STM32程序。参考文章:1.2.

2023-10-19 14:54:12 491 1

原创 用CLion配置STM32 标准库开发 启动文件 堆和栈大小

网上有教程选择的是SW4STM32,但是我们发现没有这个选项,根据网上的很多人都会要求把CubeMX降低到某个版本以下,但是一直使用低版本肯定不是解决问题的方法。之前学习STM32都是跟着视频教程用Keil,用了网上的防火墙出入站规则,使Keil断网,有没有用不知道,早期确实没有发律师函,后来有几个新入职同事,明目张胆用Keil,于是收到了律师函。因为我用的是野火的霸道V2开发板,里面的芯片是F103ZET6,对应的启动文件为对应 startup_stm32f10x_hd.s。即可,右侧的勾,勾上。

2023-10-17 15:20:22 453 1

原创 野火STM32学习 GB2312 字符的字模偏移量计算

水哥讲到0xA0-1的时候说,这个1是和数组有关,其实跟数组根本没关系,这个ADDR是为了算出该字符的字模首字节相对于GB2312第一个字符(也就是空格)的首字节偏移量,空格的编码就是A1A1。GB2312字模文件(或者数组)里,首字符就是空格,所有其他字符为了在文件(或者数组)中。这个公式其实把0xA0写成0xA1反而更好理解,总之以首字符(空格)为基准就对了。实在觉得难以理解的话,那把空格自己代进去验证,这个公式能成立,就算可行。也是0xA1,代进去为0,这就对了,因为自己对自己是没有偏移量的啊。

2023-10-11 15:16:02 320

原创 FSMC外设中的 HADDR[x]和 FSMC_A[x]的对应问题

学习野火 STM32霸道板子的时候,在液晶显示那一章,讲到了HADDR和FSMC_A的地址对应问题先对HADDR有个了解,HADDR是需要转换到外部存储器的内部AHB地址线。HADDR[26:27]对4个区(bank)进行寻址。如下表所示:有一个著名的 "地址左移一位" 原则。这个问题看上去很难理解,其实简单讲就是:当外部存储器是8位数据宽度时, HADDR[25:0]与FSMC_A[25:0]对应相连当外部存储器是16位数据宽度时,HADDR[25:1]与FSMC_A[24:

2023-09-20 11:37:28 289 1

原创 SRAM_BASE_ADDR和SRAM_BASE不同

但是我却发现我的能输出写到SRAM的内存的值。SRAM_BASE代表应该的是芯片内部的SRAM起始地址,SRAM_BASE_ADDR是我们通过FSMC扩展的外部SRAM的地址,一顿纳闷,没有调用SRAM_Init()函数,怎么会起作用了呢,查看代码发现,我给指针赋值的时候用的是SRAM_BASE。也就是*p输出不来,因为改成SRAM_BASE_ADDR后,就代表扩展的SRAM了,未初始化是不可能读写成功的。地址空间时,会访问到Bank1 的第3 小块区域,相应的FSMC_NE3 信号线会输出控制信号。

2023-09-12 14:31:18 153

原创 STM32 I2C 通讯 主模式 官方EVENTS 解释(译自英文注释)

STM32的I2C外设作为主设备时的通讯 event官方代码注释翻译解读,方便理解。

2023-08-17 11:18:39 509 1

原创 stm32 i2c EVENT 和状态寄存器 SR1/SR2的关系

就知道 EV7代表的意思是,总线上正在通讯,STM32 I2C设备处于主模式,数据寄存器(receiver接收模式)非空(有其它设备的数据通过I2C总线发送到了数据寄存器)。具体是怎么对应的呢?这代表 EV7这个事件对应的是 BUSY + MSL + RXNE 三个 flag 的组合。0x0003 其实对应的是SR2的值 也就是 BUSY 和 MSL被置为1。后面的 0x0040 对应的是 SR1的值 对应的是RxNE位 被置为1.

2023-08-17 09:52:29 558 1

原创 杰理 AC632 芯片 ADC

检测外部电压较高的电池(超过4.5V)时,硬件上可以用分压电阻加MOS管方式,软件上采用快速抢占式立即采样,在检测前打开MOS管,检测完毕关闭MOS即可,可以极大的降低系统功耗。程序在开机的时候,必须要调用 adc_init(), 不要调整SDK此函数的调用位置 ,建议其他功能都要放到此函数之后。公版SDK初始化的ADC采样时钟不高,采样一次大概耗时66us,理论最高可做到2us采样一次。注册定时采样和独占式采样和抢占式快速采样均是使用中断方式。3.抢占式快速采样立即采样。2. 独占式立即采样。

2023-05-22 14:28:49 1124 1

原创 extern 与头文件(*.h)的区别和联系(转载)

对变量而言,如果你想在本源文件(例如文件名A)中使用另一个源文件(例如文件名B)的变量,方法有2种:(1)在A文件中必须用extern声明在B文件中定义的变量(当然是全局变量);(2)在A文件中添加B文件对应的头文件,当然这个头文件包含B文件中的变量声明,也即在这个头文件中必须用extern声明该变量,否则,该变量又被定义一次。

2023-05-15 13:34:08 645 3

原创 C 语言回调函数详解

回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义。我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类似这么一个场景来说明:A君去B君店里买东西,恰好缺货,A君留下号码给B君,有货时通知A君。感觉这个让人更容易想到的是异步操作,而不是回调。另外还有两句英文让我印象深刻:1) If you call me, I will call you back;

2023-05-15 13:34:04 120

原创 字符数组最后的‘\0’是0吗?

所以strlen函数算长度的时候,没有在4之后就立即结束,而应该是直到遇到后面有‘\0’的时候才结束,不过"为什么是90,而 i 却总共循环到33为止" 就不知道了。输出结果如下,首先0输出了,这个‘0’和 ‘\0’ 有本质的区别,前者是字符0,后者是空字符,前者对应的ASCII码为48,后者为0。其实‘\0’是在告诉编译器,这是一个空字符,对应ASCII码表里的第一个字符,当用%d打印时,他的值就是0,当用%c打印时,是空,没有任何显示。运行就是正常的,看来是自动在最后一个位置补上了‘\0’。

2023-05-11 19:00:39 3672 1

空空如也

空空如也

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

TA关注的人

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