- 博客(47)
- 收藏
- 关注
原创 【TM1638不能成功读回按键值】
8led+8按键+8数码管。主函数调用TM1638_ReadData2,打印了返回值,无论是否按键,都一直打印255,为什么全是1,看来读数据函数有问题啊。
2024-08-17 11:11:25
167
原创 ..\OBJ\LED.axf: Error: L6218E: Undefined symbol TIM_ClearITPendingBit (referred from timer.o).
进入Manage Project Items里面在FWLib下添加stm32f10x_tim.c。
2024-07-13 14:30:54
150
转载 ..\OBJ\LED.axf: Error: L6200E: Symbol rgb multiply defined (by tcs34725.o and main.o).
变量是在头文件被定义的,那么我们要将其改到.c中定义,在头文件中定义是不可以的,例如a.h中int a = 1;框出来的变量被重复定义了,要从定义的地方解决。
2024-07-13 14:16:35
104
原创 Keil出现警告:warning: #223-D: function “XXX“ declared implicitly
文件涉及调用stm32f10x_flash.h里的函数,但文件没有包含stm32f10x_flash.h。我的问题是包含了头文件路径,但是编译后还是第一张图那样,所以我做了第二步,编译后就有了。
2024-07-13 14:02:20
624
原创 IC基础知识(八)ROM、PROM、EPROM、EEPROM和Flash之间的区别
EEPROM在写入数据时,仍要利用一定的编程电压,此时,只需用厂商提供的专用刷新程序就可以轻而易举地改写内容,所以,它属于双电压芯片。借助于EEPROM芯片的双电压特性,可以使BIOS具有良好的防毒功能,在升级时,把跳线开关打至“on”的位置,即给芯片加上相应的编程电压,就可以方便地升级;平时使用时,则把跳线开关打至“off”的位置,防止CIH类的病毒对BIOS芯片的非法修改。最初从工厂中制作完成的PROM内部并没有资料,用户可以用专用的编程器将自己的资料写入,但是这种机会只有一次,一旦写入后也无法修改。
2024-07-02 13:40:49
785
转载 Keil C51的printf
转载于:https://blog.csdn.net/zhanglianpin/article/details/44779009。
2024-07-01 16:16:21
34
原创 数码管的位码和断码
故可分共阳极(公共端接高电平或+5V电压)和共阴极(共低电平或接地)两种数码管(2)其中每个段均有0(不导通)和1(导通发光)两种状态,但共阳极数码管和共阴极数码管显然是不同的。(5)共阴极: 位选为低电平(即0)选中数码管, 各段选为高电平(即1接+5V时)选中各数码段, uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
2024-06-13 10:14:14
389
原创 项目问题24/5/29需求:用一路IO口捕获外界方波PWM频率,将捕获值实时传入,使得正弦波频率和外界方波频率一致
STM32F103控制下,定时器3的捕获PWM模式下的中断里的全局变量psc = 20,中断触发后,主函数while循环里TIM1_PWM_Init(1451,psc)函数初始化正弦波,用了中断传过来的全局变量psc后,为什么PWM频率不是PWM = 72000000.0 / ((145 * (psc1+1))=24.8Khz左右,而是250KHZ。而在正常运行时,while循环速度过快,导致定时器的计数不准确,从而导致PWM频率不是预期值。这样就可以确保定时器计数的准确性,从而得到预期的PWM频率。
2024-06-13 10:07:01
311
原创 startup_stm32f10x_hd_vl.s: error: A1023E: File “..\..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F
我的报错原因是,打开解压后的重命名工程。把工程名字重命名为原来的名字。
2024-05-28 18:05:21
400
原创 KEIL5鼠标右键查找定义或声明选项变灰色不可选
2.路径不能含有中文,改好后,shift+Alt+f12,更新搜索状态。3.魔法棒-》Output-》开启Browse Infomation。原因:我直接点的KEIL图标打开了昨天的工程。解决办法:关掉工程,重新从文件夹的路径打开。1.快捷键F12导航到目标位置。
2024-05-28 10:28:01
536
原创 STM32F103控制DRV8833驱动一个两相步进电机(输出互补方波)+ 电机不转的原因总结
本文主要以两相步进电机为例,为总结使用;电机规格:最大电压5V 最大电流2A 两相步进电机主控芯片:STM32F103C8T6驱动芯片:DRV8833双H桥。
2024-04-17 16:46:11
993
原创 利用sin/cos原理驱动步进电机
本文主要以两相电机为例,为总结使用;步进电机的运行性能与它的步进驱动器有密切的联系,可以通过驱动技术的改良来克服步进电机的缺点。相对于其他的驱动方式,细分驱动方式不仅可以减小步进电机的步距鱼提高分辨率,而且可以减少或消除低频振动,使电机运行更加平稳均匀。总体来说,细分驱动的控制效果最好。因为常用低端步进电机伺服系统没有编码器反应,所以随着电机速度的升高其内部控制电流相应减小,从而造成丢步现象。所以在速度和精度要求不高的领域,其应用非常广泛。细分驱动精度高;细分是驱动器将上级装置发出的每个。
2024-03-26 12:04:43
1038
原创 STM32工程报错 warning: At end of source: #12-D: parsing restarts here after previous syntax error
原来是有括号的,不做标识符来处理,而新版的,如图,直接说明了出来,那就没有必要,可以根据C/C++知识自己去推断;在C/C++选项卡里,把STM3210X_HD从prepocessor symbol define 里面删掉。在csdn上面直接下载的旧版的STM32标准库和例程,偷懒没有去官网下载最新版,所以有些许差别。这么做的原因:在老版本的官方STM32F10X.H文件里,这句话不是这么写的,若没记错的话,是。
2024-03-19 12:17:46
904
原创 GD32 触发HardFault_Handler
软件环境:kiel5 V5.35.0.0. MDKV5.35.0.2。现象:程序运行一段时间后就电机会重启,时间大概是20秒。芯片型号:GD32F130C8T6。原因:CRC校验算法中有数组溢出。
2024-02-23 13:53:53
635
2
原创 AS5600磁编码器开发记录
它指的是一个电路中的漏极(也称为漏电极)被断开,从而使电流不能流过该极;漏极开路输出需要接一个上拉电阻(上图中的R),可以利用改变上拉电源的电压,改变输出电平。上拉电阻是接在输出引脚和输出电压(上图中的Vcc)之间,可以获得高电平输出。当内部N沟道场效应管关闭的时候,上拉电阻R会把输出拉到高电平,此时场效应管的漏电流将非常的小。当内部N沟道场效应管导通的时候,它会把输出引脚拉到接近GND,此时的电流是根据欧姆定律计算的(I=Vcc/R)参考原文链接。
2024-02-23 13:51:01
615
原创 两相步进电机驱动原理
本文主要以两相电机为例,为总结使用;步进电机的运行性能与它的步进驱动器有密切的联系,可以通过驱动技术的改良来克服步进电机的缺点。相对于其他的驱动方式,细分驱动方式不仅可以减小步进电机的步距鱼提高分辨率,而且可以减少或消除低频振动,使电机运行更加平稳均匀。总体来说,细分驱动的控制效果最好。因为常用低端步进电机伺服系统没有编码器反应,所以随着电机速度的升高其内部控制电流相应减小,从而造成丢步现象。所以在速度和精度要求不高的领域,其应用非常广泛。细分驱动精度高;细分是驱动器将上级装置发出的每个。
2024-01-25 15:37:19
1196
转载 C语言U / C语言U
无符号整型和有符号整型的区别就是无符号类型可以存放的正数范围比有符号整型中的范围大一倍,因为有符号类型将最高位储存符号,而无符号类型全都储存数字。这里书上打印错了, 应该是~0U, 意思就是无符号整型0, 然后~表示按位取反,最后的结果就是全是1,这个函数的作用是求出本台计算机中,unsigned型的数据是32位的还是别的。无符号整型和有符号整型的区别就是无符号类型可以存放的正数范围比有符号整型中的范围大一倍,因为有符号类型将最高位储存符号,而无符号类型全都储存数字。数字后面带个U是表示无符号类型的数据。
2024-01-24 16:28:52
195
原创 GD32E230C8T6《调试篇》之 FMC(闪存)的读写 + USART打印
与GD32E103不同的是E230没有gpio_init这个库函数,所以参考例程是有帮助的;可以看到E230有64K的主flash,这里我选了0x0800 FC00,操作最后一页;说明使用PA9、 PA10的USART0时要选择AF1;初始化USART0 时才有了这两句;共同监督,一起努力!
2024-01-24 10:05:37
957
原创 GD32E230C8T6《调试篇》之 (软件) IIC通信(主机接收从机) + GN1650驱动芯片 + 按键 + 4位8段数码管显示 (成功)
IIC总线的SDA和SCL两根总线需要上拉,使总线处于空闲状态。IIC总线一共有两种状态、四种信号。除此之外还需要了解IIC总线的数据有效性。
2024-01-20 14:40:32
1703
原创 GD32E230C8T6《调试篇》之 (软件) IIC通信 + GN1650驱动芯片 + 4位8段数码管显示(成功)
注意GN1650是先传高位再传低位,我之前就是先传的低位,所以数码管不显示,此外要观察芯片对应的时序图,比如开始条件是SCL和SDA都为高电平,SDA先为低电平,SCL再为低电平,结束条件反之亦然;还有延时函数之前用的系统的delay_us();后来封装了一个简短的 IIC_Delay();时序的频率会更快;
2024-01-17 16:15:41
531
原创 GD32E230C8T6《调试篇》之 (硬件) IIC通信 + GN1650驱动芯片 + 4位8段数码管显示(未成功)
芯片型号更换成E230了I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。软件IIC:软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。
2024-01-17 11:39:12
1234
原创 GD32E230C8T6《调试篇》之 (硬件) IIC通信 + GN1650驱动芯片 + 4位8段数码管显示(成功)
之前调试失败的主要原因找到了,i2c_data_transmit(I2C0,Address);不能这样传送从机的地址,我是受了软件IIC的影响,以为连续送两次就行;必须用下面的语句传送从机地址,i2c_data_transmit是用来传数据的;花了半天搞定,所以不能只写代码,不看芯片规格书;也不能只看规格书,不用代码验证;最后,连续插拔数码管几十次,硬件IIC确实容易死掉(芯片没有死,因为我的测试脚有高低电平输出),只有重新上电运行;以上就是使用GN1650的过程。
2024-01-17 11:10:17
734
原创 GD32E103C8T6《调试篇》之独立看门狗(FWDGT)
两个看门狗定时器外设,独立看门狗定时器(FWDGT)和窗口看门狗定时器(WWDGT)。看门狗定时器(WDGT)是一个硬件计时电路,用来监测由软件故障导致的系统故障。它们使用灵活,并提供了很高的安全水平和精准的时间控制。两个看门狗定时器都是用来解决。看门狗定时器在内部计数值达到预设门限的时候,会触发一个复位。当处理器工作在调试模式。的时候看门狗定时器定时计数器可以停止计数。注释喂狗,芯片就会不断重启,时间大概1s;这两段来自用户手册。
2024-01-09 18:10:40
809
原创 GD32E103C8T6《调试篇》之ADC + USART打印
ADC的位数是其精度的描述,又或者说是最小分辨率,即数字值变化1对应的模拟信号变化是多大。查看GD32E103的用户手册,第12章写有,MCU片上集成了12位逐次逼近式模数转换器模块(ADC),可以采样来自于16个外部通道和2个内部通道上的模拟信号。不插温控座子时,走红色这条线,所以ADC0的值应该是满值4095或者接近4095(不同芯片有所不同,我的ADC为12的精度,2的12次方=4096,范围0-4095),但是我感觉ADC0的值受主芯片时钟和ADC时钟分频的影响,ADC0波动范围有变化;
2024-01-08 14:58:46
1311
原创 GD32E103C8T6《调试篇》之USART + 超时检测 (附代码)
PCB板是现成的,之前用的USART0,发现不对;在老工程师的指导下,发现必须要根据板的IO配置来编程。芯片:GD32E103C8T6编译环境:keil V5.35.0.0 / MDK-ARM V5.35.0.2。
2024-01-05 09:57:52
1518
1
原创 Keil MDK5中no browse information available in ‘xxx’的问题
参考博客:https://blog.csdn.net/bean_business/article/details/109189445。解决办法:魔法棒-》Output,勾选Browse Information,重新编译。我的keil5 MDK经常出现定位不到函数定义的问题。
2023-12-30 09:58:30
512
1
原创 GD32芯片烧录工具不能在线下载时检查步骤
公司产品的主芯片大部分使用GD32E和GD32F系列,之前开发使用的是J-link和ST-link;发布后的代码用正点原子烧录器下载后会自动给芯片加密,所以当产品在发布后又出现问题时,研发狗本狗要进行的一个步骤就是解除芯片保护;(此时芯片写不进也读不出)但是每次用J-link擦除真的心累,之前一篇博客有写;在老工程师的建议下,还是所以拜托公司斥巨资299大洋在官网买了一个和GD芯片配套的开发工具GD-link;使用感受就是爽!
2023-12-29 16:13:00
1139
1
原创 输入信号超出范围,调整为1600x900@60Hz
今天一大早来公司,我的小显示器突然弹出输入信号超出范围,调整为1600x900@60Hz。右键-》显示设置-》显示器分辨率-》改为1600x900 不起作用。之后参考这篇博客问题解决。
2023-12-28 09:13:31
2221
1
原创 GD32E103C8T6获取芯片系统ID
用一个数组g_uuid1[3]存放三个地址的内容;用KEIL5仿真调试,可以看出每块GD32E230C8T6芯片都有不同的ID号,每个地址的内容都可以存放2的32次方大小的数据。查看GD32E103C8T6数据手册。
2023-12-26 14:57:38
848
1
原创 GD32E103C8T6将内部晶体起振方式改为外部8M晶体起振
在system_gd32e10x.c文件里将IRC(尾部IRC是内部晶体的意思)注释,放开对应72M HXTAL(尾部HXTAL是外部晶体的意思)的注释,这里我的内部程序已经经过了分频、倍频,所以不能乱选,根据自己需求选择。选择以后,可以看到菜单中的Define,如图所示,文本框中输入的预编译的内容中有HXTAL_VALUE,没有GD32E103V_EVAL ,所以 所以啊 友友们发现了吗。我们就是要改这里,将HXTAL_VALUE删去,加入GD32E103V_EVAL。这两个宏定义就起作用了;
2023-12-19 10:10:11
307
1
原创 keil5编译出错 .\output\GD32E230C_prj.axf: Error: L6218E: Undefined symbol TIMER2_init
错误原因:在main.c里调用TIMER2_init()函数,但是在TIMER2.c TIMER2.h文件中,又叫另一个名字MYTIMER2_Init();所以main.o链接不到目标文件。
2023-12-14 18:59:16
162
2
原创 使用J-LINK解锁GD32E103的读保护
第一篇解决了J-Link不能连接目标MCU的问题,第二篇解决了j-link操作步骤的问题。开始用keil5下载时报错,其实就是芯片被保护了,不能往里面烧录程序,所以要解除保护。打开j-link按第二篇博主的操作步骤来就可以了。我看了很多博客,我参考的有用的博客有这两篇。不上板子,之后给板子供了12V的电源,再。目标芯片:GD32E103C8T6。我的问题是用j-link时一直。烧录工具:J-Link。
2023-11-11 18:04:56
498
1
原创 智能停车收费系统——所遇问题集合
想再二维码之间插入一张图片,但是数据库没有png.h库,二维码生成不了;解决办法:这个想法毙掉了,重新换了下载了QRcode库。//解决:删除工程影子目录、重新构建、ui控件删除重建、通过connect关联、复制到新建文件。解决:删除工程文件里相应文件的名字,如resource.cpp。因为他们都开了防火墙,此外IP地址会变更。
2023-09-14 15:39:58
172
1
原创 qt:构建失败,输出mingw32-make: *** [debug] Error 2 14:35:34: 进程“C:\Qt\Qt5.10.1\Tools\mingw530_32\bin\mingw3
3.构建项目时只选择自己电脑对应的编译器32或者64。2.将文件单独放到其他盘的某个文件夹下再打开。遇到问题,记录一下,积少成多~
2023-08-22 19:11:53
860
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人