- 博客(51)
- 收藏
- 关注
原创 st-link is not in the DFU mode
Keil中使用stlink烧录代码时,提示需要更新驱动,点击更新后,提示:“ST LINK is not in the DFU mode plesse restart it”,重新拔插之后,还是同样的问题。
2025-03-20 15:04:02
271
原创 单总线协议(1—Wire bus)【DS2431】
1—Wire 协议定义了复位脉冲、 应答脉冲、写0、写1、读0和读1时序等几种信号类型。所有的单总线命令序列(初始化ROM 命令功能命令)都是由这些基本的信号类型组成的。识别单总线器件(ROM 命令)单总线器件交换数据(功能命令)初始化单总线器件(初始化)
2025-01-02 13:42:11
261
原创 char SendBuff[1000] = {0};memset((void *)SendBuff,0x20,10000);在C语言中,这样会有什么潜在风险
【代码】char SendBuff[1000] = {0};在C语言中,这样会有什么潜在风险。
2024-12-25 17:06:22
159
原创 【HAL库】STM32F105VCTx多通道ADC+DMA方式的【STM32CubeMX】配置及代码实现
使能连续转换模式 hadc1.Init.ContinuousConvMode = ENABLE;,程序才会一直进 DMA中断函数DMA1_Channel1_IRQHandlerADC校准可以使ADC采集值和 Vref参考值(基准电压)接近。但是f4系列不支持。/* 校准ADC */
2024-11-13 13:53:43
370
原创 【HAL库】STM32F427ZGTx多通道ADC+DMA方式的【STM32CubeMX】配置及代码实现
【代码】【HAL库】STM32F427ZGTx多通道ADC+DMA方式的【STM32CubeMX】配置及代码实现。
2024-11-13 13:52:06
285
原创 c语言中标签的用法
尽管C语言允许使用标签,但现代编程实践通常建议限制goto语句的使用,并优先使用结构化控制流(如循环和条件语句)来组织代码。switch语句中的case和default标签是处理多分支条件的合法且有用的方式。
2024-09-01 15:28:57
974
原创 变量声明和变量定义的区别
变量定义通常放在**.c文件**中。这是因为定义变量时,编译器需要为变量分配内存,而这应该在源文件中进行,以便在编译时有具体的实现。定义通常不会出现在头文件中,因为头文件是为了声明和共享接口,而不是定义实现。示例(在file1.c// file1.c// 定义变量2. 变量声明变量声明通常放在**.h文件**中,尤其是当你需要在多个源文件中共享这个变量时。在头文件中使用extern关键字声明变量,可以让其他源文件知道这个变量的存在,并且在编译时能够正确链接到定义。示例(在file1.h。
2024-09-01 12:53:12
574
原创 结构体struct的大小计算
所以对于 S1 结构体大小为 2*3=6,至于为什么第二个 char,多的那个字节不丢到,就是遵循第三个原则,就是结构体大小结果要为成员中最大字节的整数倍。而对于 B,先不要管 A a,也就是先去掉 A a 成员结构体 B 算出其为 8,所以最后结果为 8+16=24;再看一个:就是当结构体成员变量是另外一个结构体时,只要把结构体中成员为另一结构体作为整体相加就行。因为 int 占 4 个,而 char 已经占了一个,不够,所以那三个只能多余占位。注意: 为什么 仅仅改变了结构体成员的顺序,结果不一样?
2024-08-06 18:52:30
561
原创 在C语言中,联合体或共用体(union )是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。
在C语言中,union是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。这意味着union中的所有成员共享同一块内存空间,因此它们之间会相互覆盖。在你给出的union由于union的特性,这三个成员中的任何一个都可以被存储在union分配的内存空间中,但一次只能存储一个成员的值。这意味着,如果你给type_16赋值,那么type_u8和type_u16的值将会变得不可预测(因为它们共享相同的内存位置),反之亦然。
2024-08-06 18:03:10
323
原创 结构体(struct)和枚举(enum)有什么区别
通常用于表示一组相关联的数据,如表示一个学生的信息(姓名、年龄、成绩等)或者表示一个车辆的属性(品牌、颜色、型号等)。- 结构体是一种用户自定义的数据类型,允许你组合多个不同类型的变量(成员变量)到一个单独的数据结构中。- **访问方式**:结构体的成员变量可以单独访问和修改,枚举常量一般作为整数常量使用,不可修改。- **用途不同**:结构体用于组合多个不同类型的变量,枚举用于定义一组有意义的常量。- **成员类型**:结构体的成员可以是任意数据类型,枚举的成员是整数常量。
2024-07-14 19:44:19
815
原创 IIS接口协议
I2S = Inter-IC Sound = Integrated Interchip Sound = IIS,是飞利浦在1986年定义(1996年修订)的数字音频传输标准,用于数字音频数据在系统内器件之间传输,例如编解码器CODEC、DSP、数字输入/输出接口、ADC、DAC和数字滤波器等。在WS变化后的第一个SCK脉冲,IIS协议定义三根信号线:时钟信号SCK、数据信号SD和左右声道选择信号WS。SCK:模块内的同步信号,从模式时由外部提供,主模式时由内部产生;√ WS=1,表示选择右声道。
2024-07-11 00:42:57
979
原创 PCB常见布线规则总结
PCB板上预划分数字、模拟、DAA信号布线区域。 数字、模拟元器件及相应走线尽量分开并放置于各自的布线区域内。 高速数字信号线走线尽量短。 敏感模拟信号走线尽量短。
2024-07-05 08:54:17
585
原创 AD17原理图模块化设计时修改子图名称后和总图失去联系
此时只需要将总图中,对应已修改的子图的框图的名称改为和子图一样即可,改完记得重新编译工程。
2024-03-08 16:49:53
397
原创 陶瓷气体放电管防雷管
陶瓷气体放电管是防雷保护设备中应用最广泛的一种开关器件,串联于线路中,可用在交直流电源、各种信号电路的防雷,都可以用它来将雷电流泄放入大地。它是把一对放电间隙封装在充以放电介质(惰性气体)的陶瓷管中构成的。按电极数分,有二极放电管和三极放电管(相当于两个二极放电管串联)两种。其外形为园柱形,有带引线和不带引线两种结构形式(有的还带有过热时短路的保护卡)
2024-03-08 16:07:52
1089
原创 漏电保护插头
这是一个漏电保护电路。1.按下脱扣线圈220 V电路导通,经过桥式整流电路给监控芯片供电,监控芯片开始工作,监控互感器的电流。2.按下测试开关K1,K1所在电路导通,此时零线和火线经过互感器的电流不相等,互感器感应到后输出电压到监控芯片的输入检测引脚,经过芯片内部电路放大锁存后到输出控制引脚,激活SCR门极使SCR导通,使脱扣线圈通电,利用电磁线圈原理弹开开关,将220V电路断开。SCR(硅控整流器,可控硅)ZCT零序电流互感器。
2024-03-06 23:16:06
354
原创 单片机中SPI的速度设置
以STM32F042F6P6为例,最高主频为48MHz,除以SPI的分频系数就是SPI的时钟频率。下图是拿示波器打SPI时钟线SCLK测到的信号。
2024-02-05 12:01:38
954
原创 关于示波器的使用
CURSOR,光标:用来测量波形的指示光标,有垂直和水平两个方向,比如要手动测量一个波形的幅值或者周期,就将两个光标调整到合适的位置,示波器会给出对应的值。measure,测量:一般用来调出波形的基础参数,比如峰峰值、最大值、最小值、幅度、频率等参数。horizontal position:调整波形的水平方向的位置,即波形左右移动;vertical position:调整波形的竖直方向的位置,即波形上下移动;),触发类型(边沿、脉冲宽度),触发源(通道一、通道二);有波形,锁定不了位置的时候使用、
2024-02-05 11:54:39
1388
原创 关于字节(Byte)和位(bit)的换算和常见的数据传输
1kBps=8kbps即1kByte/s=8kbit/s?B=Byte(字节),b=bit(位)per second即每秒。
2024-02-04 11:45:32
600
原创 stm32CubeMX,配合Keil,使用HAL库进行串口通信
在usart.c文件中添加以下函数//重定向printf1至uart4的demo在usart.h文件中添加以下两个头文件和prinf1函数的声明然后即可在main.c中调用printf1()函数。记得在main.h文件中加上#include "usart.h"的头文件。while (1)!!\r\n");//低电平点亮绿灯编译,下载到板卡,运行成功!!!
2024-01-09 20:57:10
1121
原创 使用keil5IDE调试时,C语言调试技巧汇总
如果后面的代码比其他代码呈现浅灰色,说明宏定义没有被声明,或者没生效,而且通过更进选项(go to definiton)也找不到定义的位置;反之,颜色应该和其他代码一致,并且可以更进到定义的位置。#if和#endif的匹配。
2024-01-09 19:36:44
560
原创 keil5调试工具选择界面选项注意事项
在选择好调试工具后,要点开Settings选项卡,根据接口选择JTAG模式或者SWD模式。点开后如下图,根据目标板卡的接口选择JTAG或者SW。
2024-01-04 14:38:08
602
原创 推挽输出(Push-Pull)和开漏输出(Open-Drain)
概念推挽(push-pull)输出是由两个MOS或者三极管组成,两个管子始终保持一个导通,另一个截止的状态。不需要上拉电阻,不可“线与”,不可电平转换,推挽电路输出高电平时叫推,是拉电流;推挽电路输出低电平时叫挽,是灌电流;
2023-10-26 17:29:31
2072
原创 多位数码管
当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线(a-dp)全部是连接在一起的,即是共享的(所以多位数码管可以静态显示,但是显示时要么只显示一位数码管,要么多位同时显示相同内容),独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端(共阳或共阴)叫做“位选线”。如图中的1H和2H,就是位选线,图中为共阴数码管,所以这两个位选线为低电平,哪个数码管就会点亮,如果都是低电平,则都会亮。单位数码管引脚示意图。
2023-10-26 15:16:08
438
原创 51单片机16位计数器初值计算(重装载定时器)
CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的。通常,包含一个机器周期的指令称为单周期指令,比如 MOV指令,CLR指令等。:在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。一个状态周期等于两个时钟周期。机器周期=6个状态周期=12个时钟周期。最大定时时间=(时钟周期*12)*65536=65.536ms(65536为16位计数器得到,即2^16=65536)时钟周期是单片机的基本时间单位,两个振荡周期(时钟周期)组成一个状态周期。
2023-10-21 15:51:42
1022
原创 51单片机特殊编程
* SCON */这是在声明一个位变量,这个变量的名字是SM0,并且它被初始化为SCON寄存器的第7位。在C语言中,'sbit'是Keil C51编译器的一种特性,用于访问特定的位。这个声明用于直接访问和控制某个特定的位,而不必关心或直接操作那个位的其余部分。这使得代码更简洁,更易于理解和维护。这里,'SCON^7'表示SCON寄存器的第7位。'^'是按位异或运算符,但在这里它被用作位域的标记,表示我们关心的是这个位。实际上,这个表达式的结果总是等于它自身第7位。
2023-10-20 15:53:07
918
原创 AT89S51和STC89S51下载方式的区别
宏晶国产STC单片机则具有串口ISP功能,可直接使用串口,将程序下载进单片机。即将USB转TTL的TXD接单片机的RXD,RXD接单片机的TXD。STC系列的单片机在上电的时候会执行在ISP FLASH的ISP程序。只要在串口上收到连续的0x7F,便会进入ISP模式。所以STC单片机下载程序时,需要先在计算机端程序中点下载,然后给单片机通电。另外STC单片机需使用宏晶专用的单片机下载程序STC-ISP下载。AT89S51系列单片机的ISP下载是通过P1^5、P1^6、P1^7、RST引脚来下载的,
2023-10-18 11:34:08
448
原创 Altium Designer PCB开窗(去除阻焊层)
在PCB界面选择Top/Bottom solder层,选这画线工具(不是布线),画需要开窗的走线。开窗效果如下图所示。
2023-10-13 11:46:22
7364
原创 关于事件和中断的学习总结
这张图是一条外部中断线或外部事件线的示意图。图中的红色虚线箭头,标出了外部中断信号的传输路径;图中绿色虚线箭头,标出了外部事件信号的传输路径。图中信号线上划有一条斜线,旁边标志20字样的注释,表示这样的线路共有20套。
2023-10-12 16:32:07
194
原创 STM32cubeMX中断响应优先级设置不了
如图,一开始以为是设置好抢占优先级后,响应优先级设置不了(下拉只有0一个选项),查资料才知道中断优先级是要分组的。
2023-10-10 18:27:59
1590
原创 关于STM32cubeMX外部中断调试的问题汇总
前言,在使用按键中断时,为了消除按键抖动,想在中断函数里使用延迟函数以消除按键抖动,但是直接在中断函数中使用延时函数,会导致直接就进不了按键中断。要想在按键中断中使用延时函数,就需要将系统滴答计时器的优先级设置的比按键中断高,所以做如下设置,重新生成代码即可解决。如图,默认的系统滴答计时器的抢占优先级是比中断线的优先级低的。
2023-10-10 17:03:06
1296
原创 LDO芯片和DC-DC芯片有什么区别?
LDO(low-dropout regulator)低压差线性稳压器,通过在输入和输出之间产生一个稳定的电压差来实现稳压。LDO通过调整电路管的阻抗变化使输出电压保持稳定,当输出电压由输入电压升高或负载电流减小,出现输出电压偏离设定值而升高的趋势时,通过负反馈使调整管的阻抗增大,降低输出电压使之恢复设定值而保持稳定。当输入电压降低或负载电流增大,出现输出电压偏离设定值而降低的趋势时,通过负反馈使调整管的阻抗减小,提高输出电压使之恢复设定值而保持稳定。由于是通过电阻调节,所以发热量就比DC-DC要大。
2023-09-08 16:24:21
388
原创 到底什么是奇偶校验?
串口数据格式首先注意这是两种校验方式,即一个奇校验,一个偶校验。发送端数据的最后一位增加奇偶校验位,使数据转化为二进制之后bit1的个数为奇数或者偶数,在接收端判定bit1的个数是否为奇数或者偶数的方法,由此校验数据在传输过程中是否准确;
2023-09-08 12:00:08
316
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人