- 博客(42)
- 收藏
- 关注
原创 头文件与源文件声明类型的区别
我们知道,头文件一般都是在声明类型、变量、函数的(包括extern声明变量)。那可不可以放到源文件中声明呢?区别又是什么?可以在其他源文件中使用这个定义的类型(HexToBin) (前提:include这个头文件)只能在自己的源文件中使用定义的类型(HexToBin)。
2025-03-19 20:38:45
156
原创 平衡车电机连接与控制
PWMA和PWMB是控制速度,而M1A、M2A、M1B、M2B是控制方向。3530电机通过编码器将速度反应给主控芯片。TB6612FNG芯片连接3530电机。主控芯片连接TB6612FNG芯片。
2024-12-28 17:38:28
85
原创 STM32串口接收与发送(关于为什么接收不需要中断而发生需要以及HAL_UART_Transmit和HAL_UART_Transmit_IT的区别)
【代码】HAL_UART_Transmit和HAL_UART_Transmit_IT的区别(串口发送只能收到一个字节)
2024-12-06 00:23:21
2480
原创 关于keil项目烧录第二次就会出现no target connect的问题
两种调试接口,但某些开发板或 MCU 默认启用了 JTAG。选择 JTAG 可能会导致连接问题,特别是当目标板的调试引脚与其他外设共享时,可能导致冲突或信号不稳定。而 SWD 是更轻量的接口,通常占用的引脚更少,更适合用于大部分开发应用。STM32 系列 MCU 通常支持。
2024-12-02 15:58:01
500
原创 最新版的stm32f1xx.h文件中取消了u8, u16, u32的类型定义
使用typedef多次重新定义罢了,关于这些定义可以看下面几个文件:core_cm4.h;其实ST之所以这样多种方式表示同一个值,主要是减少代码编写工作量,同时也是为了向下兼容旧版本的程序。使用芯片stm32f103zet6和stm32l151c8t6,在移植程序时发现,编译器提示u8未定义;stm32l1xx系列,本来在旧的.h文件中对uint_8等有类型定义为u8, 但是新的.h文件中没有了。新版.h文件已经锁定,无法直接修改添加;可以自建一个头文件,重新定义包装一下。
2024-12-01 14:55:33
270
原创 GPIO的寄存器以及ODR和BSRR的区别
每个引脚的复用功能通过这两个寄存器中的相应位进行配置。低16位设置引脚为高电平(置1),高16位设置引脚为低电平(置1),此操作是原子性的,不会影响其他引脚。每两个连续的位配置一个引脚的上拉或下拉电阻,支持没有电阻、上拉电阻、下拉电阻。每两个连续的位配置一个引脚的输出速度,支持低、中、高、极高速选项。寄存器也是一个32位寄存器,用于设置和重置 GPIO 引脚的电平状态。寄存器是一个16位寄存器,用于读取或设置 GPIO 引脚的输出状态。寄存器用于读取引脚的输入状态,返回每个引脚的电平状态(高或低)。
2024-11-28 14:56:42
1392
原创 STM32的中断(什么是外部中断和其他中断以及中断号是什么)
EXTI或者其他外设发出的中断信号就是中断号,每一个中断信号都有唯一的中断号,也可以叫中断通道号。中断通道号会交给NVIC处理,我们在配置NVIC就是在配置相应中断号的优先级。配置方式如下图:这里以定时器为例,其实没什么区别。EXTI的中断方式是上升沿或下降沿和需要配置中断线,这里的中断方式是溢出中断。EXTI配置:我们要配置他的外部中断源(哪个引脚),以及触发方式,还有选择外部中断线。如上上面的那种图就是在配置EXTI9_5_IRQn中断号的优先级。注意:某个 GPIO 引脚与 EXTI 线路(如。
2024-11-21 19:09:58
1316
原创 关于中断向量表中没有EXTIx_IRQHandler的问题
在该文件中,所有的中断服务例程(ISR)都会按照特定的顺序列出,包括外部中断(EXTI)。但是在 STM32F103 中,外部中断的线路 5 到 9(包括 EXTI7)会共享一个中断向量,因此,如果你在中断向量表查找中断向量服务函数时,没有查找到EXTI7_IRQHandler等,是因为中断向量中根本就没有这个函数。(EXTI15_10_IRQHandler同理)因此,您需要使用 EXTI9_5_IRQHandler。STM32 的中断向量表通常由启动文件(如。,这是因为它们使用相同的硬件中断线路。
2024-11-21 17:39:47
338
原创 标准库 -- 为什么 EXTI中断需要使能复用时钟与为什么不需要使能?
外部中断(EXTI):由于外部中断需要从特定的 GPIO 引脚或外部信号引脚获取触发信号,因此需要配置GPIO 引脚复用,使得引脚可以连接到 EXTI 系统。其他中断(如串口、定时器等):这些中断直接由相应外设(USART、TIM 等)产生,不需要通过 GPIO 引脚,因此不需要配置复用功能,只需要启用相关外设的中断。因此,在 STM32 中,外部中断需要配置复用来链接 GPIO 引脚与 EXTI 线路,而串口和定时器中断则直接由硬件外设产生,不需要这样的配置。
2024-11-10 14:52:43
563
原创 如何实现Delay_us和Delay_ms延时(SysTick定时器)
SysTick的主要用途(计时)操作系统心跳时基:在实时操作系统(RTOS)中,SysTick通常用于产生周期性中断,作为系统节拍,触发任务切换和延时计时等功能。精确延时:在裸机开发中,SysTick可用于实现精确延时,适合对时间敏感的应用场景。通用计时器:在没有其他通用计时器的情况下,SysTick可以用作简单的通用定时器。
2024-11-09 18:20:33
1214
原创 关于stm32中IO映射的一些问题
虽然固件库已经包含了GPIO寄存器的内存映射,但位带操作提供了一种简便、直接的位操作方式,特别适合于频繁、独立的位操作需求,简化了代码,同时解决了多任务环境中的竞争问题。在STM32固件库(比如HAL或LL库)中,GPIO的寄存器映射已经定义好了,开发者可以通过标准的读写操作访问GPIO引脚的状态。接下来,我们可以直接通过带位操作来修改特定值。一、我们可以直接通过位移操作来修改特定值。二、下面我们提供另一种方法,位带操作。
2024-11-09 16:56:41
276
原创 关于STM32在代码中的而GPIO里面的寄存器(ODR等)不需要宏定义的问题
GPIOA_BASEGPIOA->BSRRBSRR寄存器的地址会是0x10(这是在硬件手册中定义的)。BSRR。
2024-11-06 17:20:34
330
原创 STM32的TIM中Prescaler和ClockDivision有什么用以及计数器溢出时间计算
我们在stm32中需要使用到时钟,在设置时容易把Prescaler和ClockDivision混淆,为什么有时候ClockDivision不需要设置呢?PrescalerPrescalerPrescalerPrescaler可以进一步降低计数频率。
2024-11-03 17:02:37
1810
1
原创 关于IIC在通讯时为什么不会改变输入输出模式
这段代码利用开漏输出特性,不需要手动切换引脚方向,**通过将 SDA 设置为高电平(浮空)**就能让引脚处于输入模式,以检测从设备是否发送了 ACK 信号。
2024-11-01 00:02:21
514
原创 GPIO -- 推挽输出与开漏输出
N-MOS管被导通,外部电流接地,电流被挽进来。此时外部电流为0。推挽输出:一、高电平大小确定:高电平只能受固定的VDD控制。二、多个设备共享:不可以几个GPIO控制一个输入。三、响应速度:推挽输出可以快速切换高低电平,适合高频应用。开漏输出:一、高电平大小不确定:可以自己决定。二、可以几个GPIO控制一个输入。三、响应速度:开漏输出响应速度受上拉电阻影响,上升时间较慢。为什么开推挽不能支持几个GPIO控制一个输入?
2024-10-31 16:47:05
707
原创 什么是高阻态?
一、什么是高阻态:在开漏(open-drain)输出配置中,如果两个 MOSFET(场效应晶体管)都处于不导通状态,相当一个大电阻,这种情况相当于将输出引脚置于高阻态。
2024-10-31 14:40:57
1424
原创 解决:Microsoft Defender SmartScreen 已阻止此不安全内容
我们在下载一些盗版软件时候,会触发了Defender SmartScreen检测,导致无法继续操作,非常苦恼,一下是解决办法:
2024-10-30 14:06:13
6309
原创 HAL_RCCEx_PeriphCLKConfig函数配置ADC时钟
【代码】HAL_RCCEx_PeriphCLKConfig函数配置ADC时钟。
2024-10-29 13:03:25
405
原创 STM32软件模拟和硬件模拟的区别(i2c)
以i2c为例子,我们有两种方法使能,一种可以通过cubemx在里面配置,另一种是自己讲i2c写出来。
2024-10-25 19:02:21
425
原创 I2C的通讯(简图)
I2C使用两根信号线进行通信:一根时钟线SCL,一根数据线SDA。I2C将SCL处于高时SDA拉低的动作作为开始信号,SCL处于高时SDA拉高的动作作为结束信号;传输数据时,SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递1位数据。
2024-10-25 13:35:15
253
原创 STM32中断流程(简洁清晰)以及在标准库与HAL中的区别
用于接收中断的服务函数:用于处理接收完成中断的中断服务函数。USART1_IRQHandler:是中断程序(在中断向量表中,我的stm32f103c8t6芯片在startup_stm32f103xb.s文件中可以找到),也称为。它是当 USART1 硬件发生中断时,处理该中断的函数。
2024-10-24 11:41:06
277
原创 HAL_UART_IRQHandler和HAL_UART_Receive_IT
HAL_UART_IRQHandler和HAL_UART_Receive_IT都会调用HAL_UART_RxCpltCallback回调函数,那岂不就只用一个就行?答案是错误的。
2024-10-24 11:03:52
1161
原创 高阻态是什么意思?
高阻态(High Impedance State,简称高阻态)指的是在电子电路中,特别是数字电路中的一种特殊状态。通常用于三态(Tri-state)逻辑电路或总线系统。高阻态表示输出端不对外提供电压信号,表现为既不输出高电平(1)也不输出低电平(0),而是等效于断开状态,类似于电路中没有连接的情况。
2024-10-23 18:55:46
1936
原创 Keil5M点 Reset and Run 还是要点复位的运行解决方案
and Run 却还要点复位键才能跑程序。只需将以下的Enable去掉勾选即可。新更新的MDK发现点了。
2024-10-21 08:18:04
440
原创 为什么输出模式就不用设置上下拉了
比如:KEY_0右侧的IO端口应该配置为PULLUP,默认为高电平,当KEY_0按钮按下后,IO接地被拉低,变成低电平。这样才有按钮按下电平变化的效果。比如:KEY_UP右侧的IO端口应该配置为PULLUP,默认为高电平,当KEY_UP按钮按下后,IO接地被拉高,变成高电平。当IO输出高电平时,IO为1, 当IO输出低电平时,IO为0;
2024-10-17 17:48:29
239
原创 STM32CubeMX代码第一次烧录后无法继续烧录
我的情况是第一次连接STM32时可以读取到,但是完成一次烧录后就读取不到了,如果代码是用STM32CubeMX导出后修改的,可能就是这个问题,如下图,即SYS中的Debug选择了No Debug,如果这么选择了,那么代码烧录进STM32后就会马上禁用JTAG-DP和SW-DP,就没有办法继续烧录了。如何从根本上解决这个问题,让下一次烧录可以正常进行,即在STM32CubeMX中把SYS的Debug改成。或者Trace Asynchronous Sw,这样只有会禁用JTAG-DP而不会禁用SW-DP。
2024-09-23 22:58:30
668
原创 Note: source file ‘..\SYSTEM\delay\delay.c‘ - object file renamed from ‘adk_f103\delay.o‘ to ‘adk_f1
在相应报错的文件点Option,然后把include in target build的钩子去掉,不要管报错。接着就可以顺利运行啦。
2024-09-17 14:21:26
236
原创 CPU核数和线程数
比如,可以通过一个CPU核心数模拟出2线程的CPU,也就是说,这个单核心的CPU被模拟成了一个类似双核心CPU的功能。比如Inte l赛扬G460是单核心,双线程的CPU,Intel 酷睿i3 3220是双核心 四线程,Intel 酷睿i7 4770K是四核心 八线程 ,Intel 酷睿i5 4570是四核心 四线程等等。一个核心最少对应一个线程,但英特尔有个超线程技术可以把一个物理线程模拟出两个线程来用,充分发挥 CPU 性能,即一个核心可以有两个到多个线程。CPU从早期的单核,发展到现在的双核,多核。
2024-09-11 20:42:06
503
原创 360强力卸载(方法简单,百分百有效有效)
按照其他博主方法卸载,不是没有卸载权限,就是卸载有风险。最后(这一步可以做也可以不做,无所谓),你也可以在注册表中查找有没有剩余的。:点击程序和功能,选择卸载360。
2024-08-20 11:38:43
2841
1
原创 Keil,Pycharm等编译器右键无法进入define的情况
正确查找定义方法是直接点击一下函数后右键。第一种可能是选中了void等不包括函数名的字母。第二种是不小心选中了空格。
2024-08-15 20:54:18
227
原创 C语言实习学生管理系统(指针)
printf("Inpute the number someone you needed:(如10141301)");int CheckNumber(int no_temp)/*检查学号是否存在,存在返回序号,不存在返回-1 */void Inputfile(int i,FILE *fp) /*把下标为i 的记录写入文件 *//*初始化,文件不存在,则建立,同时记录下文件中的记录数 */void Init() /*初始化,文件不存在,则建立,同时记录下文件中的记录数 *//*读一条记录从文件 */
2024-08-15 20:43:37
636
原创 KEIL软件中编译时出现的Error L6200E: symbol multiply defined ...的解决方法
原因:如LCD.C文件使用了bmp.h中的image[ ]变量,那么就不能将#include"bmp.h"放在LCD.H中,要将#include"bmp.h"放在LCD.C文件中,或者可以把bmp.h中的image[ ]变量在LCD.C文件中定义。multiply defined (by lcd.o and main.o).这个错误信息。红色的字就是需要修改的变量,按上面的两种方法修改即可。查找方法:例如:..\OBJ\OLED.axf: Error: L6200E: Symbol。
2024-08-15 15:53:48
2103
原创 IAP15F2K612S的LED灯问题
将 P2 设置为 0x80 然后迅速设置为 0x00 可能会导致所有连接到 P2 的灯短暂地被激活。这是因 为当 P2 被设置为 0x80 时,P2 的第 7 位(即 P2.7)被置高电平,可能会瞬间激活与 P2 连接的所有灯。然后迅速将 P2 设置为 0x00,会让这些灯短时间内处于点亮状态,但由于时间极短,所以亮度不高。然后我用以下方法重新控制LED灯。在控制LED中,我想用一个单独控制一个灯执行时却导致全部灯点亮问题,如下:问题在于。直接使用Device_Ctrl控制。
2024-08-08 16:38:18
267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人