
MCU
文章平均质量分 57
qlexcel
万物皆为比特
展开
-
not a genuine st device abort connection报警
检查下单片机是不是ST的。我是使用ST link V2给GD32下载程序时遇到的,点击确定后可以成功下载程序和仿真。顾名思义,报警内容是:不是真正的ST设备,中止连接。keil下载程序遇到。原创 2025-03-06 21:32:03 · 215 阅读 · 0 评论 -
如何使用JLINK连接雅特力MCU
要注意选择keil正在使用的jink版本,比如我自己安装了3个版本的jink,但是我keil正在使用7.56版本,因此选择V756版本的路径。运行软件,选择jink安装的路径,然后点start即可,出现successful代表成功。keil正在使用7.56版本。需要上官网下载支持包。原创 2025-02-09 23:16:18 · 345 阅读 · 0 评论 -
GD32的SPI程序读写程序,SPI特性研究
先等待发送buf变空,然后再把要发送的数据装入发送buf。接着等待接收buf有数据,然后把接收buf中的数据读出来。当然也可以设置帧长度为12位,读写两次,但是这样读回来的数据就需要移位处理。能够知道这个过程需要24位,因此SPI的的帧长度设置为8位,然后读写3次。spi_i2s_data_receive 读取当前字节MISO引脚的波形。不能因为前面两个字节只发送数据,不需要接收数据,就把后面两行删掉!看到波形,最后一个字节还没有发送完,CS就拉高了。如果帧长度设置为16位,读写两次就有32位了。原创 2025-01-26 15:47:08 · 447 阅读 · 0 评论 -
STM32的ADC工作模式
STM32的ADC模式我们一般用。原创 2025-01-23 22:09:15 · 1334 阅读 · 0 评论 -
CAN总线波形中最后一位电平偏高或ACK电平偏高问题分析
在CAN总线网络中,当一帧报文被各个节点接收时,在ACK阶段,多个CAN节点同时响应(都发显性),流过终端电阻的电流被各个CAN节点均分,那么平均到每个节点的电流就减小了,如下图所示,VDH、VDL的压降也减小,相应CANH-CANL的差分电压就增大了,即ACK应答电平会出现偏高的现象。按照标准,在总线输出为显性时,CANH=3.5V,CANL=1.5V,差分分电平:CANH-CANL=2V,总线网络电阻为60欧,流经终端电阻的电流约为33mA(2V/60欧);实际上这是正常的现象,最后一位是ACK位。原创 2025-01-01 22:39:39 · 528 阅读 · 0 评论 -
Keil5把变量的数据导出,可视化
a[idx]是你想导出数组的名字,idx是你想导出数组的大小,idx不要超过你定义数组的大小,否则会出错。打开Debug里面的Function Editor (Open Ini File)…然后在Command下面的框中输入showdata(),然后点击回车。数组里面的数据就保存在你和你工程文件对应的地址下。把想要导出变量的数据存入数组中。然后点击Compile。点击data.log。转载 2023-12-16 11:36:50 · 2693 阅读 · 0 评论 -
使用fromelf把axf文件转换成elf格式
fromelf -h即可打印出帮助信息。原创 2023-01-02 16:57:13 · 3494 阅读 · 0 评论 -
GD32读保护解除
开启读保护后,jflash 可成功连接,但是什么也做不了。但是通过 Jlink Commander 是可以读写其寄存器的:最开始两个字节不是A5 5A,表示读保护开启。原创 2022-11-30 16:42:01 · 4252 阅读 · 1 评论 -
STM32\GD32把程序加载到SDRAM的运行方法
1、直接跳转到SDRAM中执行代码是不行的,因为SDRAM的地址默认是不能执行代码的,需要配置下MPU才行。如果程序太大,可以考虑使用IAP+APP的方式,首先通过IAP把APP加载到SDRAM中,然后跳转到APP中运行。2、跳转到APP时,代码就已经在SDRAM中运行,因此在APP中配置时钟和SDRAM初始化要慎重,这会导致SDRAM运行不正常,单片机直接 HardFault_Handler。配置MPU的方法参考:https://www.armbbs.cn/forum.php?原创 2022-10-29 22:24:35 · 2887 阅读 · 0 评论 -
SEGGER调试利器RTT,替代串口,高速数据上传
下载RTT代码,地址:在工程目录里面新建一个 SEEGER 文件夹,将 RTT 组件内容全都添加进去,添加的内容把RTT 文件夹中的2个c文件添加到 MDK 工程添加RTT文件夹的路径到工程移植完成!原创 2022-09-01 00:10:48 · 7755 阅读 · 1 评论 -
ESP32-PICO-D4的使用
特点尺寸仅为 (7.000±0.100) mm × (7.000±0.100) mm × (0.940±0.100) mm集成1 个 4 MB 串行外围设备接口 (SPI) flash集成 2.4 GHz Wi-Fi 和蓝牙双模的单芯片方案,采用台积电(TSMC) 超低功耗的 40 纳米工艺已将晶振、 flash、滤波电容、 RF 匹配链路等所有外围器件无缝集成进封装内,不再需要外围元器件即可工作管脚嵌入式 flash 连接至 VDD_SDIO(26脚),由 VDD3P3_RTC原创 2021-12-28 15:14:02 · 17226 阅读 · 2 评论 -
jlink的SWD与JTAG下载模式的对应接线方法
jtag模式接线第1脚(VDD)第3脚(TRST对应stm32的PB4)第5脚(TDI对应stm32的PA15)第7脚(TMS/SWDIO对应stm32的PA13)第9脚(TCK/SWCLK对应stm32的PA14)第13脚(TDO\SWO对应stm32的PB3)第15脚(RESET对应stm32的NRST)第4.6.8.10.12.14.16.18.20中的任意一个脚(地脚)。sw模式下载接线第1脚(VDD)第7脚(TMS/SWDIO对应stm32的PA13)第9脚(TCK/SW转载 2021-10-15 16:08:10 · 3298 阅读 · 0 评论 -
N76E003介绍与开发资料获取
介绍N76E003 为新唐高速 1T 8051 微控制器系列产品,提供 18 KB Flash ROM、可配置Data Flash与高容量1 KB SRAM ,支持2.4V 至 5.5V 宽工作电压与 - 40 ℃ 至105 ℃ 工作温度,并具备高抗干扰能力 7 kV ESD/4 kV EFT。N76E003 在20 pin封装下提供高达18根I/O脚位;周边包含双串口、 SPI 、 I²C 、6通道 PWM 输出;内建优于同类产品之 < 2 % 误差之高精确度16 MHz RC晶振与高分辨率8原创 2021-09-22 16:49:11 · 992 阅读 · 0 评论 -
BMP格式详解
//BMP信息头typedef __packed struct{ uint32_t biSize ; //BITMAPINFOHEADER结构所需要的字数。 long biWidth ; //图象的宽度,以象素为单位 long biHeight ; //图象的高度,以象素为单位 uint16_t biPlanes ; //为目标设备说明位面数,其值将总是被设为1 uint16_t biBitCoun原创 2021-09-13 11:58:08 · 10539 阅读 · 0 评论 -
GD32F103内部Flash做虚拟U盘
直接使用官方例程,有如下注意点:1、USB的时钟是48MHz,需要根据自己的系统主频来分频。否则时钟频率不对,USB会枚举失败,电脑提示设备描述符获取失败。在如下文件和位置设置宏定义来选择系统主频。原创 2021-08-21 23:10:24 · 2375 阅读 · 1 评论 -
使用MLX90640自制红外热像仪(三):图像插值、图像彩色编码
经过上一节,已经把MLX90640的32x24个像素点读出来了,可是使用32x24直接显示在屏幕上,显示区域显示太小了,于是就需要对图像就行放大。原创 2021-08-12 21:42:31 · 9391 阅读 · 2 评论 -
使用MLX90640自制红外热像仪(二):API函数的使用
前面一篇文章介绍了MLX90640的相关信息和API库的移植,接下来介绍一下API库中的函数,和使用方法。 首先给出API函数的调用顺序,再对每个用到的API函数做说明:#define FPS2HZ 0x02#define FPS4HZ 0x03#define FPS8HZ 0x04#define FPS16HZ 0x05#define FPS32HZ 0x06#define MLX90640_ADDR 0x33#define RefreshRate F原创 2021-08-12 21:41:42 · 7672 阅读 · 13 评论 -
使用MLX90640自制红外热像仪(一):MLX90640介绍与API库移植
平时工作的时候会遇到如下场景:新焊接好的板子,通电后发现电流异常,需要看下板子上哪里发热异常。需要监控某个器件(比如三极管、MOS)的温度,以防过热烧掉。测量温升。 因此需要一个红外热像仪,可是网上看了一下都要2000左右了,虽然分辨率很高,可是我并不需要那么好的性能,于是干脆自己做一个。AMG8833的像素点是8x8的,感觉太低了,于是选用了32x24像素点的MLX90640。MLX90640介绍特性和优点小尺寸,低功耗, 32*24 像素红外阵列方便集成标准的 TO39 封原创 2021-08-12 21:39:37 · 33964 阅读 · 22 评论 -
使用MLX90640自制红外热像仪(四):stm32f103c8t6刷320x240分辨率屏的时间测试
72M主频的stm32f103c8t6刷TFT,全屏一直刷新测试硬件连接:/******************************* ILI9341 显示屏8080通讯引脚定义 ***************************//******控制信号线******///片选#define ILI9341_CS_CLK RCC_APB2Periph_GPIOA #define ILI9341_CS_PORT原创 2021-08-12 21:22:24 · 4580 阅读 · 1 评论 -
写个测试程序测试下,单片机使用浮点型数效率有多低
int main(void){ float data1; data1=0.123; data1+=0.456; while(1) { data1+=0.456; }} 25: data1=0.123; 0x08000648 4C0D LDR r4,[pc,#52] ; @0x08000680 26: data1+=0.456; 0x0800064A 4620 MOV r0,r40x080原创 2021-08-12 20:59:43 · 1360 阅读 · 0 评论 -
Keil5报错:error: more than one instance overload function “xx“ has C linkage
转自:https://blog.youkuaiyun.com/malloc_luo/article/details/104437926用Keil编写C、C++混编程序碰到了这个问题#ifdef __cplusplusextern "C"{#endif /*__cplusplus*///overloadvoid foo(int ,int );void foo(float );#ifdef __cplusplus}#endif /*__cplusplus*/编译之后报错:more than o转载 2021-08-01 10:47:10 · 1127 阅读 · 0 评论 -
C语言便于调试的宏定义 __FILE__、__FUNCTION__、__LINE__、__VA_ARGS__ 参数使用
__FILE__、__FUNCTION__、__LINE__ 这几个宏定义从名字就可以看出功能:__FILE__:宏在预编译时会替换成当前的源文件名,字符串类型。__FUNCTION__:宏在预编译时会替换成当前的函数名称,字符串类型。__LINE__ :宏在预编译时会替换成当前的行号,整型。__VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。 这几个宏定义,好像在VC6中无法使用,但是在Ke原创 2021-07-23 18:02:28 · 1819 阅读 · 3 评论 -
GD32的flash读保护和写保护
介绍 在实际发布的产品中,在GD32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到bin或hex文件格式的代码拷贝,别有用心的厂商会利用该方法山寨产品。为此,GD32芯片提供了多种方式保护内部FLASH的程序不被非法读取,但在默认情况”下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节(Option Bytes)中的配置。 GD32的选项字节地址和功能都跟STM32一样: 其中前面带“n”的是不带“n”的原创 2021-07-07 16:28:35 · 10745 阅读 · 2 评论 -
GD32的flash读、擦除、写操作
GD32的flash特征1、在flash的前256K字节空间内,CPU执行指令零等待;在此范围外,CPU读取指令存在较长延时;2、对于flash大于512KB(不包括等于512KB)的GD32F10x_CL和GD32F10x_XD,使用了两片闪存;前512KB容量在第一片闪存(bank0)中,后续的容量在第二片闪存(bank1)中;3、对于flash容量小于等于512KB的GD32F10x_CL和GD32F10x_HD,只使用了bank0;4、对 于 GD32F10x_MD , 闪 存 页 大 小原创 2021-07-06 23:19:48 · 24620 阅读 · 7 评论 -
Ymodem协议学习笔记
介绍 Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议。 Xmodem协议是最早的,支持传输128字节信息块。 Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。 平常所说的Ymodem协议是指的Ymodem-1K,除此还有Ymodem-g(没有CRC校验,不常用)。 YModem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送使用CRC校验,保证数据传输的正确性。它每传输一个信原创 2021-06-30 12:04:01 · 1483 阅读 · 2 评论 -
GD32通用定时器、高级定时器PWM输出例程
通用定时器/*********************************************************************************************************** 函 数 名:PWMOut_LCD_BK_Init* 功能说明:TFT背光PWM初始化* 形 参:* 返 回 值:*****************************************************************************原创 2021-06-27 11:31:21 · 8411 阅读 · 0 评论 -
GD32定时器输入捕获例程
官方的例程/** \brief configure the GPIO ports \param[in] none \param[out] none \retval none */void gpio_configuration(void){ rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_AF); /*configure PA6 (TIMER2原创 2021-06-27 11:22:43 · 11398 阅读 · 7 评论 -
同构多核和异构多核简单介绍
多核处理器的由来 多核出现前,商业化处理器都致力于单核处理器的发展,其性能已经发挥到极致,仅仅提高单核芯片的速度会产生过多热量且无法带来相应性能改善,但CPU性能需求大于CPU发展速度。尽管增加流水线提高频率,但缓存增加和漏电流控制不力造成功率大幅增加,性能反而不如之前低频率的CPU。功率增加,散热问题也严重了,风冷已经不能解决问题了。 那么新技术必须出现-多核处理器。早在1996年就有第一款多核CPU原型Hydra。2001年IBM推出第一个商用多核处理器POWER4,2005年Intal和AMD原创 2021-06-17 13:13:59 · 12844 阅读 · 1 评论 -
串口的硬件流控和软件流控
如果数据在两个串口之间传输时,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。使用流控机制时,当接收端数据处理能力饱和时,就发出“不再接收”的信号,发送端就停止发送,直到接收端处理能力释放,发送“可以继续发送”的信号给发送端时,发送端才继续发送数据;硬件流控常用的有RTS/CTS(请求发送/清除发送)流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制,使用时须连接相应的电缆线;软件流控一般通过串口发送XON/XOFF字符来实现。...原创 2021-06-06 08:16:36 · 4712 阅读 · 0 评论 -
keil调用bat文件,实现删除、复制、加密文件功能
用法通过如下方式打开“User”子标签可以看到左边有3个触发条件:“Before Compile C/C++ File”:编译C/C++源文件前触发“Before Build/Rebuild”:Build之前“After Build/Rebuild”:Build之后每个触发条件后,可以添加两条指令:“Run #1”、“Run #2” 点指令栏后面的文件图标,可以把某个路径的bat文件添加进来。然后keil就会自动在满足上面3个触发条件时,调用对应的bat文件来执行了。例子 比如我要原创 2021-05-18 09:39:08 · 3886 阅读 · 0 评论 -
LPC单片机IO口默认状态、复位状态、未初始化时输出高电平处理
由STM32切换到LPC1788,发现LPC的IO未初始化时输出高电平,初始化后才能拉低,这样和STM32的设计就不兼容了。分析查LPC数据手册后,发现:复位状态为输入模式,上拉模式。后面也有具体说明,IO口的默认配置为带上拉的输入模式。由一个弱MOS提供弱上拉能力。解决1、既然是内部带了弱上拉,那么可以直接外部加稍微强一点的下拉,把电平拉下来。经过试验外部加5.1K的下拉电阻即可把电平拉到0.3V,可满足我的需求。2、可以外加反向电路,把默认的高电平变为低电平。原创 2021-04-12 18:18:21 · 3861 阅读 · 1 评论 -
jlink调试出现**JLink Warning: T-bit of XPSR is 0 but should be 1. Changed to 1错误
原因是Jlink通信频率设置得太高了,调低即可。或者使用“Auto clk”功能自动适配最高频率。原创 2021-03-19 18:34:58 · 3057 阅读 · 1 评论 -
IAR编译提示could not open file lnkstm8s003f3.icf
这个问题一般出现在把工程的位置移动之后。把工程中的icf文件再次定下位即可解决。“Project”-“Options”-“Linker”,找到工程中的icf文件,包含进入即可。原创 2020-09-11 18:02:30 · 931 阅读 · 0 评论 -
J-Flash的使用
一、使用J-Flash读单片机的Flash数据,并保存 打开J-Flash,选择好单片机的型号点“OK”后进入,然后使用“Target”-“Connect”连接,连接上了会在LOG窗口打印之后“Target”-“Manual Programming”-“Read back”-“Entire chip”即可读回Flash中的所有数据。读回后“file”-“Save data file as...”,把数据保存成文件文件格式很多:二、使用J...原创 2020-07-16 17:02:22 · 15934 阅读 · 1 评论 -
STM32F1和STM32F2的option byte(选项字节)的作用
STM32F1的option byte占了16字节。但是这16字节,每两个字节组成一个正反对,即:字节1是字节0的反码,字节3是字节2的反码,...,字节15是字节14的反码,所以,芯片使用者只要设置8个字节就行了,另外8个字节系统自动填充为反码。地址和内容描述如下:STM32F2的option byte同样占了16字节。但是真正使用的只有4个字节。...原创 2020-07-16 16:07:48 · 4114 阅读 · 0 评论 -
STM32的晶振脚(OSCIN和OSCOUT)当成普通IO来使用
一不小心把模拟IIC放到OSCIN和OSCOUT脚上了,现在来说一下怎么把这两个脚当成普通IO来使用: 首先这两个引脚是时钟引脚,于是我们先要把外部时钟关闭,改用内部的时钟。 也就是把HSE关闭,使用HSI。stm32的时钟初始化函数如下:/** @addtogroup STM32F10x_System_Private_Functions * @{ */void RCC_Configuration(void){ RCC_D...原创 2020-07-10 17:35:33 · 18130 阅读 · 1 评论 -
字符串匹配的KMP算法和C语言代码,不需要思考就能理解
KMP算法用于判断一个字符串是否包含另一个字符串,如果包含就返回脚标。其实KMP算法本身特别简单,我看了几篇本章都号称简单易懂,结果看得我云里雾里,直到我看到了阮一峰:字符串匹配的KMP算法,才真正看懂。下文基本上都是阮一峰文章的转述,代码也是在网上其他地方找的。特此说明。一、KMS算法的处理过程下面用KMP算法在字符串"BBC ABCDAB ABCDABCDABDE"中寻找字符串"ABCDABD":首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符...原创 2020-06-22 23:45:54 · 1144 阅读 · 1 评论 -
KeilKill.bat删除keil编译生成的过程文件
del *.bak /sdel *.ddk /sdel *.edk /sdel *.lst /sdel *.lnp /sdel *.mpf /sdel *.mpj /sdel *.obj /sdel *.omf /s::del *.opt /s ::不允许删除JLINK的设置del *.plg /sdel *.rpt /sdel *.tmp /sdel *.__i /sdel *.crf /sdel *.o /sdel *.d /sdel *.axf /sdel *..原创 2020-06-20 18:09:19 · 9685 阅读 · 1 评论 -
STM32命名,Flash分布,扇区
STM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:(1)STM32:STM32代表ARM Cortex-M3内核的32位微控制器。(2)F:F代表芯片子系列。(3)103:103代表增强型系列。(4)R:R这一项代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚。(5)B:B这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flas...原创 2020-05-23 12:04:15 · 16158 阅读 · 5 评论 -
IAP的原理和stm8的IAP
一、IAP介绍 stm8的Flash很小,建议使用寄存器操作,不要用库函数,否则不好控制代码大小。stm8的Flash是字节编程的,而且不需要先擦除再写。IAP的流程为:进入IAP---解锁Flash---//重新初始化STM8的中断向量表 把它重新定义到APP的中断向量中void STM8_HanderIqr_Init(void){ uint8...原创 2020-03-09 22:58:02 · 2094 阅读 · 0 评论