- 博客(29)
- 收藏
- 关注
原创 为什么串口发送一串数据时需要延时?
2步骤因为是硬件处理,速度很快,就几个机械周期,故delay_us(10)就足够了,之后的流程就是等待移位寄存器空时,发送寄存器自动补上数据,当发送到最后一个字节时,因为一个字节发送需要1.043ms,为了确保最后一个字节发送成功,所以使用dela_us(1043).注:这里使用标志位判断发送完成更加稳妥,只是使用延时也可以,今天来讲讲为什么要使用延时,直接循环发送数据不行吗?原因:串口调用USART_SendData时,进行一下的操作。2.移位寄存器通过硬件接收发送寄存器的值。系统频率:96MHz。
2025-09-04 21:03:40
289
原创 一口气入门Modbus协议
RS485:是硬件,是路,决定了数据能传多远、多稳、带多少设备。Modbus:是软件协议,是交规,规定了数据的具体格式和传输规则,让设备之间能听懂对方的话。为什么用Modbus:因为它简单、免费、用的人最多,是工业领域里的“普通话”。学会了它,你就能和市场上绝大部分的工业设备“对话”了。你先掌握了Modbus+RS485这个黄金组合,就打下了工业通信的坚实基础,以后再学其他更复杂的协议就容易多了!特性线圈寄存器保持寄存器类比开关货架数据货架存的东西状态(开/关, 是/否)数值。
2025-08-25 17:10:49
683
原创 STM32时钟初始化流程
Flash是程序的家,但它的“反应速度”跟不上CPU这个“急性子”。初始化Flash(设置等待状态)就是在CPU和Flash之间加一个“缓冲”,强制CPU等Flash准备好数据再读,避免因速度不匹配而“撞车”(读错数据)。务必在提升系统主时钟频率之前,根据目标频率配置好Flash等待状态!这是启动代码里一个非常关键且容易忽视的步骤。等待状态数完全依赖于你设定的系统时钟频率和你使用的具体MCU型号。一定要查阅该MCU的数据手册或参考手册中的Flash章节,找到那个关键的频率-等待状态对应表格。
2025-08-15 16:41:45
1011
原创 标准库开发和寄存器开发的区别
提供了对底层硬件的抽象封装通过API函数调用实现功能开发效率高,代码可移植性强适合快速开发和产品原型验证示例:STM32的HAL库、标准外设库。
2025-07-26 14:15:25
475
原创 谷歌账号注册
之后按照步骤一步步填就行了,虽然可能很大概率还是会弹手机号,但是这种方法做下来,就算是+86的手机号也大概率能收到短信。第三步:删除Google.com,以下我只标了一个,实际是两个都要删除,.hk的也删除。第一步:打开谷歌网页版,左上角的这个锁点击一下。第四步:点击这三个点,新建无痕窗口。第二步:点击这个Cookie。第六步:创建个人用途用户。第五步:点击右上角这个。
2025-07-22 14:46:33
417
原创 ../User/MyDefine.h(23): error: #5: cannot open source input file “oled.h“: No such file or director
在 Keil 项目文件 中,包含路径配置错误。不要有空格,删除即可解决。
2025-07-19 17:29:33
286
原创 定时器更新中断与串口中断
可是发现调了还是没有用,最终发现,我把定时器中的任务屏蔽后可以正常使用了。问题:我想把打印姿态传感器的角度,但是重定向的打印函数突然打印不出来。尝试:我怀疑是优先级的问题,故调整了串口,定时器,dma的优先级。把耗时的任务移到任务调度器或者主循环里即可。,导致系统被"锁死"在中断中。
2025-07-15 21:12:28
246
原创 PID电机控速与编码器介绍
PID控制器是一种广泛应用于工业控制系统的反馈控制算法。PID代表比例(Proportional)、积分(Integral)和微分(Derivative),通过这三种控制作用的组合来调整系统输出。说人话:PID是一个闭环控制算法,如果是目标值是Target,实际值是Actual,误差是目标值-实际值,也就是Target-Actual,PID算法的目的就是让误差等于0,理想情况下就是目标值等于实际值。闭环比开环多一个环节,就是反馈。
2025-07-13 18:41:50
2424
原创 MPU6050用法
MPU6050是一种广泛应用于姿态检测的6轴运动处理传感器,由InvenSense公司研发生产。它集成了以下测量功能:三轴加速度测量(X/Y/Z轴)测量范围可配置(±2g、±4g、±8g、±16g)典型应用:检测设备的倾斜角度、运动方向示例:手机自动旋转屏幕的横竖屏切换功能三轴角速度测量(陀螺仪)测量范围可配置(±250°/s、±500°/s、±1000°/s、±2000°/s)典型应用:检测设备的旋转速度示例:无人机飞控系统的姿态稳定数字运动处理器(DMP)
2025-07-11 00:59:45
2466
原创 定时器的功能(STM32F103C8T6为例)
定时器的本质是计数器!定时器的本质是计数器!定时器的本质是计数器!从基本定时器框图我们可以看出,定时器就是由预分频器,计数器,自动重装载寄存器,控制器构成。
2025-07-09 12:44:01
916
原创 嵌入式中SD卡
在嵌入式系统开发中,MCU内置存储空间常常无法满足用户数据、日志文件和媒体资源等大容量存储需求。SD卡凭借其存储容量大、性价比高以及接口简便等特点,成为理想的存储扩展方案。外部存储器接口 通过SPI、I2C、SDIO等接口连接外部存储设备(如Flash芯片、SD卡),容量可从几MB扩展至GB级别。例如,W25Q系列SPI Flash提供16MB~1GB的选项。文件系统适配 在扩展存储上部署FAT32、LittleFS等轻量级文件系统,便于管理大容量数据。需注意MCU的资源开销(如RAM占用)。我们这里选
2025-07-05 19:46:02
463
原创 关于GD25Q40E的介绍
最近在学习西门子嵌入式开发板时,上面有个挂载外设GD25Q40E,刚好把学习心得分享出来。GD25Q40E是一款采用SPI协议通信的Flash存储器。CS#(片选引脚):SPI采用主从模式通信,主机通过拉低该引脚电平选择从机设备进行通信。注意:主机需为每个从机配备独立的CS引脚进行控制。SO(数据输出引脚)WP#(写保护引脚):输入引脚,低电平有效(低电平时启用写保护,禁止写入操作)VCC(电源引脚):2.7~3.6VVSS(地线引脚)注意:主机与所有从机必须共地SI(数据输入引脚)
2025-07-04 21:32:51
1362
原创 关于ADC和DAC用DAM搬运数据时的感悟
上图是我配置的DAC启动函数,以 DMA 模式启动 DAC 通道输出。DMA 会自动从指定的内存缓冲区读取数据,并根据触发信号(通常来自定时器)写入 DAC 数据寄存器。
2025-07-02 18:01:48
454
原创 关于ADC时间的感悟
ADC是能实现模拟-数字转换的外设,单片机、计算机只能处理数字量,而自然界中存在的大部分是模拟的信号,要用单片机处理模拟量,就需要使用ADC转换信号为数字信号处理。
2025-07-02 00:58:49
1029
原创 printf重定向与串口通讯
设置好波特率(比如115200)、数据位、停止位、校验位(通常8N1)等参数,让它监听开发板发来的数据。通过串口在电脑上看到这些信息,你就知道程序执行到哪里了,变量是什么值,哪里出错了。它把格式化好的字符串,交给一个更底层的“工人”函数(通常是。的输入重定向(从串口读数据)就容易了,可以制作简单的命令行交互界面。在电脑上,这个“工人”的工作就是把字符送到显卡驱动,显示在屏幕上。你的开发板通常有串口(UART)引脚(TX, RX, GND)。用一根USB转串口线,把开发板的串口连接到你的电脑的USB口。
2025-07-01 11:53:12
687
原创 关于UART的三种代码实现方式
UART(Universal Asynchronous Receiver/Transmitter)通用异步收发器,是一种常见的通讯协议,它能让单片机与单片机,电脑与单片机之间能够通讯,说白点就是单片机的数据可以发到电脑上显示,电脑可以发送指令控制单片机执行相应的操作。第一步:选择自己要使用的串口(最好不要跳过这步直接做第二步,我们知道外设它是有复用功能映射的,直接第二步可能会选择到其他的复用引脚上)第二步:点击模式位异步通信第三步:使能中断第四步:配置串口基本参数,一般只动波特率这个选项。
2025-06-29 00:58:44
577
原创 关于软件PWM介绍
PWM叫脉宽调制,它可以实现用软件来模拟模拟量的变化,比如正弦波。本质就是在一定的周期里调节脉宽,使输出类似模拟量。概念一:什么是脉宽时间,就是高电平的时间概念二:什么是周期,从低电平变到高电平,在从高电平变到低电平所用的总时间,算是一个完整周期。概念三:什么是占空比?占空比就是高电平占总周期的比例。
2025-06-27 18:10:07
683
原创 keil盗版芯片提示解决方法
我用GD32的板子烧录STM32的代码,会包盗版芯片。更改后需要重新配置debug里的配置。可更改上图为这个,不然有时会报错。
2025-06-27 12:02:51
163
原创 GD32_DEMO_01\GD32_DEMO_01.axf: Error: L6218E: Undefined symbol led_proc (referred from scheduler.o).
axf:错误:L6218E:未定义的符号led_proc(从scheduler.o引用)。起初我想要声明一个函数,用这种方法声明,结果报错。中声明了这个函数,但没有提供它的定义(实现)。这个错误表明链接器(linker)找不到。改成这样,声明一个空函数就行。
2025-06-27 11:26:41
253
原创 *** Target ‘GD32_DEMO_01‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available.
项目:GD32 DEMO 01目标‘GD32_DEMO 01’使用arm编译器‘默认编译器版本5’,这是不可用的。请查看已安装的ARM编译器版本:‘管理项目项-文件夹/扩展’来管理ARM编译器版本。“目标的选项-目标”为目标选择一个ARM编译器版本。
2025-06-27 11:11:38
545
1
原创 关于GPIO速度配置介绍
学习嵌入式系统需要掌握时钟概念,它是单片机的核心部件。时钟就像系统的心脏,精准控制着所有外设的运行状态,若不开启外设时钟,相应功能将完全失效。本质上,时钟是一组周期性方波信号。内置RC振荡器产生固定频率外接晶振提供精准时钟源让我们深入了解系统时钟和外设时钟的工作原理。以STM32F103系列芯片为例,其系统架构如下图所示:STM32F103采用AHB作为系统总线外设通过桥接方式连接到APB1和APB2总线系统时钟为各个外设模块提供时钟信号。
2025-06-26 14:02:53
1170
1
原创 理解HAL库的工作原理
进来发现他是一个结构体,里面有许多的成员(这些成员是我们熟悉的寄存器),其实这是GPIO配置的结构体,功能就是把我们配置的,用结构体指针的形式当做实参,传入我们HAL_GPIO_WritePin的形参里。按上面的流程,GPIO口就可以配置,用户端不用关系寄存器级的问题,只需关心这个函数怎么用,参数填什么就行了。到上面其实就够了,你已经学会怎么去找API接口调用,怎么填入形参,就能根据你的项目需求,参考设备的手册以及协议手册等等等,去配置单片机了。接下来,我们以GPIO为例子,来介绍HAL库的工作原理。
2025-06-26 00:39:38
480
原创 关于GPIO口杂谈--开漏模式和CubeMX输出配置介绍大全
拿I2C来举例,有两个传感器挂载在I2c总线上,当一号传感器要输出低电平,那就会将GPIO口的MOS管闭合,GPIO口输出低电平 ,此时二号传感器想输出高电平,如果是推挽输出,那此时MOS接P-MOS,芯片短路,最终导致芯片烧毁,为了防止这种情况,I2C是开漏模式,至于冲突问题,需要我们在。第二个是写函数,参数是GPIO口的操作句柄,GPIO口的端口号,使能位。第三个是翻转电平函数,参数是GPIO口的操作句柄,GPIO口的端口号。第一个是读函数,参数是GPIO口的操作句柄,GPIO口的端口号。
2025-06-25 16:54:15
445
原创 关于任务调度器的感悟
今天我们重点介绍裸机任务调度器。所谓裸机任务调度器,是指在裸机编程环境下实现的任务管理机制。裸机编程指的是直接基于硬件平台进行开发,无需操作系统支持,由程序直接掌控CPU、内存和外设等硬件资源。这个调度器相当于一个智能的时间管家,它能统筹管理项目中各类周期性任务的执行时序,比如LED闪烁控制、按键检测等常见功能。下面我将分享初学阶段遇到的几个典型问题,看看大家是否也有类似的困惑。答:回答这个问题之前,我们要先了解一下任务调度器的作用是什么?能实现什么功能?
2025-06-25 00:15:46
1027
原创 Keil5 C51 MDK安装与破解(极速版)
点击此软件包安装,与MDK安装在同一路径下。(比较方便,不然你得两个软件,能兼并成一个当然最好)出现上面这样显示就是成功了,当然MDK也要重复一遍,相信聪明的你也可以成功破解。下载后出现此图标,建议直接安装C盘,毕竟内存占用不大。这里有选项,点击允许存在就行(箭头),我已经允许了,所以没有显示。注意(可能会报错打不开,打开电脑安全中心关闭,保护历史记录)这个随便填无所谓,填完直接下一步next。如果你没有改路径,则一直点next就行。将CID号复制到破解软件中。点击这个,出现如下界面。
2025-06-24 20:51:20
3146
1
原创 Python对于C语言的变化第一章
相较于C语言的printf,python是print,而且变量是随处定义的,可以不用表明其数据类型。所以数据类型都能转为字符串string类型,但是只要全数字的字符串才能转为其他类型(如int)使用如上,type()的返回值可以直接用print输出,输出结果为数据类型,如下图所示。输出print时不用像C语言printf("钱包还有:%d",money);不支持原因:还不够完善,可能会有隐藏bug。转换时只需要int()--转为整型。float() -- 转为浮点型。str()--转为字符串。
2025-06-21 21:04:18
188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅