除不掉的灰色
适合自己的才是最好的。
展开
-
STM32和GD32内部时钟与外部时钟讲解
这点比AVR单片机做的好一些,AVR单片机时钟一旦配置成外部的,如果外部时钟正常那时无法下载程序的。是高速内部时钟,RC振荡器,频率为8MHz,上电后默认的系统时时钟 SYSCLK = 8MHz,Flash编程时钟。1. 当 HSI 被用作 PLL 时钟输入时,可以实现的最大系统时钟频率为 64 MHz。是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。是低速内部时钟,RC振荡器,频率为40kHz,可用于独立看门狗IWDG、实时时钟RTC。原创 2024-03-28 10:26:21 · 1146 阅读 · 0 评论 -
ASCII码对照表
1、是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。在这个页面,你可以找到8位的256个字符、ASCII码表和Windows-1252 (code page 1252,它是国际标准ISO 8859-1的一个扩展字符集) 标准保持一致;2、是mericantandardode fornformationnterchange 的缩写,而不是ASCⅡ(罗马数字2),有很多人在这个地方产生误解;3、原创 2024-03-26 22:09:04 · 127 阅读 · 0 评论 -
扫地机器人完整代码
【代码】扫地机器人完整代码。原创 2024-03-26 21:33:27 · 608 阅读 · 0 评论 -
PID控制系统详解
人其实也是一个复杂的控制系统,体温,血压,ph值等...人: 走进很热的房间,体温升高, sensor皮肤表面,感觉到热,controller下丘脑释放神经胆碱,你开始出汗。水分蒸发带走热量,体温回到正常。电梯:当用户选择楼层后,电梯会在指定楼层停靠。汽车,地铁,自动门,飞机定速巡航,自动导航都需要用到控制系统。原创 2024-03-26 21:32:24 · 130 阅读 · 0 评论 -
嵌⼊式⾯试宝典
1. 简单描述下C语⾔中⼤⼩端的概念⼤⼩端是⼀种计算机存储数据的⽅式,它决定了在内存中如何排列多字节数据的字节顺序。:多字节数据的⾼位字节存储在内存的低地址处。:多字节数据的低位字节存储在内存的低地址处。8051 stc单⽚机是⼩端模式ARM的话 默认是⼩端模式,但是可以通过编译器配置,配置成⼤端模式。加分项: 之前有个⽹络通讯TCP相关的项⽬,就是⼤端模式的。2. C语⾔关键字static有什么作⽤3. 写⼀个标准的MIN宏4. C语⾔Const有什么⽤?原创 2024-01-29 16:56:07 · 345 阅读 · 0 评论 -
平衡小车——PID控制理论
PID(Proportional-Integral-Derivative)控制器是一种广泛应用于工程领域的控制算法,它包含三个主要部分:比例(P)、积分(I)和微分(D)。通过调整这三个部分来使系统的实际输出更接近期望输出。1. 比例(P)比例控制根据误差(期望输出与实际输出之差)的大小来调整控制量。误差越大,控制量越大;误差越小,控制量越小。比例控制有助于快速减小误差,但可能导致稳态误差(静态误差)。2. 积分(I)积分控制对误差进行积分,累积误差值。这有助于消除稳态误差,提高系统的精确度。原创 2024-01-13 17:38:54 · 245 阅读 · 0 评论 -
平衡小车——调试协议
帧头命令位数据长度数据位校验位帧尾字节数111n11默认值0x7a待定待定待定待定0x7b命令位表示命令类型数据位n值,由数据长度位的值决定校验位(命令位 + 数据长度位 + 数据位)的结果,取高位以控制开发板上PID配置为例,定义出控制协议如下帧头命令位数据长度数据位校验位帧尾idxPID字节数111144411默认值0x7a0x01待定待定0x7bidx:1个字节,int类型, 表示配置哪一组PIDP。原创 2024-01-13 17:29:52 · 120 阅读 · 0 评论 -
平衡小车——编码器
电机中轴连接了齿轮,当中轴转动时,齿轮随着中轴转动而转动,最终传导到末端连接轴。末端连接轴的速度,被减速齿轮降低了,末端连接轴和中轴的速度比就是减速比。正交编码的主要原理是通过检测A相和B相信号的相对相位变化来确定旋转的方向和步数。通过检测这两个信号的相对相位变化,可以确定旋转的方向。: 正交编码器提供的是增量式的测量,而不是绝对位置。轮子是和末端连接轴连接在一起的,RPM为300时,轮子1分钟可以转300圈,那轮子可以走过的距离我们是可以求出来的。,每分钟转动的圈数,说的时末端连接轴的转速。原创 2024-01-13 17:18:03 · 147 阅读 · 0 评论 -
平衡小车——陀螺仪
它可以执行复杂的运动处理算法,如姿态估计、运动追踪和运动补偿,以提供更精确的运动数据。它由三个角度组成,分别表示绕三个相互垂直的轴(通常是固定的坐标系的X、Y、Z轴)旋转的量。DMP可以执行传感器融合算法,将来自陀螺仪和加速度计的数据融合在一起,以提供更准确、更稳定的姿态和运动跟踪信息。尽管欧拉角在许多情况下都很有用,并且易于人类理解,但在某些情况下,使用四元数等其他表示方法可能更适合处理旋转问题,特别是在需要连续旋转操作或精确姿态控制的情况下。绕Z轴旋转,将物体沿着Z轴的正方向旋转。原创 2024-01-13 00:16:24 · 324 阅读 · 0 评论 -
嵌入式开发——平衡小车架构设计(2)
外设中间件是一个封装,理论上是可以不要的。之所以存在,是在于可以起到硬件接口统一标准化的策略。外设中间件是对具体芯片控制的封装。下层可以是对应芯片提供的标准库,或者其他实现。在此基础上进行泛化,拓展到不同平台上。板级驱动,首先是应用于具体的开发板上,开发板在设计之初,就已经规划好了硬件开发板上有什么功能。开发板上的功能性驱动,需要使用到外设来实现。例如你的开发板中,有个需求,需要实现呼吸灯,呼吸灯如何闪烁,闪烁时间间隔等等这些,都属于业务逻辑,而业务逻辑实现需要通过调度硬件驱动来实现。原创 2024-01-07 01:09:24 · 425 阅读 · 0 评论 -
嵌入式项目——平衡小车(1)
驱动板需要焊接的如上图。原创 2024-01-07 01:08:08 · 584 阅读 · 0 评论 -
嵌入式——循环队列
循环队列 (Circular Queue) 是一种数据结构(或称环形队列、圆形队列)。它类似于普通队列,但是在循环队列中,当队列尾部到达数组的末尾时,它会从数组的开头重新开始。这种数据结构通常用于需要固定大小的队列,例如计算机内存中的缓冲区。循环队列可以通过数组或链表实现,它具有高效的入队和出队操作。原创 2024-01-07 01:06:07 · 732 阅读 · 0 评论 -
任务驱动式编程
【代码】任务驱动式编程。原创 2024-01-07 01:02:37 · 426 阅读 · 0 评论 -
嵌入式开发——电源管理单元PMU
普通睡眠:任何中断都会唤醒。深度睡眠: 唤醒中断睡眠优先级要高一些。待机: 会重启,不会走下面。原创 2024-01-02 13:24:12 · 1390 阅读 · 0 评论 -
嵌入式开发——GD32F4之SPI查询
【代码】嵌入式开发——GD32F4之SPI查询。原创 2023-12-31 13:35:08 · 684 阅读 · 0 评论 -
嵌入式开发——SPI Flash
W25Q128是一种常见的串行闪存器件,它采用SPI(Serial Peripheral Interface)接口协议,具有高速读写和擦除功能,可用于存储和读取数据。W25Q128芯片容量为128 M-bit(16 M-byte),其中名称后的数字代表不同的容量选项。不同的型号和容量选项可以满足不同应用的需求,比如W25Q16、W25Q32、W25Q128等。通常被用于嵌入式设备、存储设备、路由器等高性能电子设备中。原创 2023-12-31 13:34:10 · 459 阅读 · 0 评论 -
嵌入式开发——SPI OLED屏幕案例
oled.h中引脚定义修改。原创 2023-12-31 13:31:41 · 470 阅读 · 0 评论 -
嵌入式开发——SPI原理
在SPI(Serial Peripheral Interface)通信中,MSB(Most Significant Bit)和LSB(Least Significant Bit)是指数据字节的高位(最高有效位)和低位(最低有效位)。它们用于描述数据位的传输顺序,即哪个数据位首先被发送或接收。MSB First: 在这种模式下,SPI通信从数据字节的最高有效位(MSB)开始传输,依次传输到最低有效位(LSB)。这是SPI通信的默认模式,也是最常见的模式。大多数SPI设备都使用此模式。原创 2023-12-31 11:33:58 · 1015 阅读 · 0 评论 -
嵌入式开发——GD32F4之ADC查询
通道ADC0ADC1ADC2PF6IN5PA5PF7IN6PA6PF8IN7PA7PF9IN8PB0PF10IN9PB1PF4IN15PC5PF5IN16温度IN17VrefIN18VBAT。原创 2023-12-29 20:58:11 · 531 阅读 · 0 评论 -
嵌入式开发——ADC开发
左对齐与右对齐,表示的是采样的数据,如何存储到寄存器的。特点:ADC 在一系列通道上进行顺序采样,每个通道都被转换一次,然后整个序列可以重复进行,如果结合连续模式使用。定义:在连续模式下,一旦 ADC 被启动,它会不断地对选定的通道进行采样和转换,直到显式停止。定义:在扫描模式下,ADC 按照预设的顺序自动扫描多个通道,并对每个通道进行一次采样和转换。扫描模式,是在多个通道需要同时采样的情况下使用的,确保每个通道都能够获得数据。分辨率为采样精度,可选为12位,10位,8位,6位。配置adc全局采样的频率。原创 2023-12-28 23:38:03 · 1123 阅读 · 0 评论 -
嵌入式开发——ADC模拟信号和数字信号
数字信号是由离散的数字值构成的信号,这些数字值代表了某种物理量在一定时间间隔内的采样值。1. 分辨率:ADC的分辨率是指ADC输出数字信号的位数,也就是最终数字信号的精度。自然界中的物理量都需要通过传感器将其转换成电信号后,才能进行进一步的分析,传感器在模拟物理量的变化,模拟信号是对原始物理量连续变化的近似表示。4. 时钟:ADC的时钟是指ADC进行采样和量化的时钟信号,时钟频率决定了ADC转换速率的上限。采样之后得到的信号通常被称为抽样信号,因为在时间轴上它是离散的,但在幅值轴上是连续的。原创 2023-12-28 21:13:51 · 1312 阅读 · 0 评论 -
嵌入式开发——GD32F4的I2C查询
【代码】嵌入式开发——GD32F4的I2C查询。原创 2023-12-28 21:06:32 · 522 阅读 · 0 评论 -
嵌入式开发——I2C屏幕案例
去掉I2C处理的逻辑,将I2C和驱动分离,原因是,在整个系统中,I2C是总线,会外挂多个设备,不应该将一个设备和I2C绑死。由于OLED屏幕内部维护了一个二维数组,二维数组又是按照列去发送数据的,因此我们对数据发送逻辑进行修改操作。信号处理过程中,需要将输出改为输入,sda线需要由主从双方进行交替使用。测试示例中,找到芯片对应平台,我们选择的是。修改一些API命名,比如delay的api。通常碰到这种情况,我们需要进行分析。内存中是一行一行的进行存储的。修改芯片设置,修改烧录方式为。采用自己的模板环境。原创 2023-12-28 21:01:52 · 577 阅读 · 0 评论 -
嵌入式开发——I2C软实现
【代码】嵌入式开发——I2C软实现。原创 2023-12-28 20:46:23 · 443 阅读 · 0 评论 -
嵌入式——I2C原理代码结合(干货)看图易懂
图文解读I2C,简单上手,代码举例。原创 2023-12-26 17:05:48 · 958 阅读 · 0 评论 -
嵌入式开发——ARM介绍
例如,在移动设备领域,需要更高效的处理器性能和更低的功耗,ARM架构就相应地增加了对大核心、小核心、动态电压调节等技术的支持,提高了性能和功耗的平衡。同时,在工业自动化和物联网等领域,ARM架构也不断地适应新的需求和技术发展,推出了更加灵活和可定制化的处理器系列和解决方案。随着时间的推移,ARM架构也不断地升级和改进,推出了一系列新的版本和系列,包括ARMv3、ARMv4、ARMv5、ARMv6、ARMv7和ARMv8等版本。● 家电和消费电子:炬芯、建荣、中微、中颖、雅特力、芯圣、汇春、灵动、晟矽。原创 2023-12-26 13:38:53 · 1605 阅读 · 0 评论 -
嵌入式——WDGT看门狗
看门狗(Watchdog)是一种用于监视系统运行情况的硬件设备,它可以在系统出现故障或者卡死时自动重启系统,从而保证系统的稳定性和可靠性。看门狗(Watchdog)在嵌入式系统中起着至关重要的作用,它通常是一种硬件计时器或计数器,用于监控系统的运行情况。系统健壮性和稳定性: 看门狗能够监控系统的运行状态,一旦系统出现故障、死锁或意外情况,可以通过重启系统来恢复正常运行,确保系统的稳定性和可靠性。防止死锁和程序错误。原创 2023-12-25 20:40:41 · 1385 阅读 · 0 评论 -
嵌入式——RTC闹钟Alarm
先检查编译环境配置,尝试把Optimization等级分别调整为。原创 2023-12-25 20:35:27 · 1385 阅读 · 0 评论 -
嵌入式——RTC内置实时时钟
BCD(Binary-Coded Decimal,二进制编码十进制)是一种用于表示十进制数字的二进制编码形式。在RTC(实时时钟)等应用中,BCD格式常用于存储和显示日期和时间信息。它的主要特点是每个十进制数位都被编码成4位二进制数。在BCD格式中,一个十进制数的每一位被表示为4位二进制数,其中每个二进制数位都对应一个十进制数位。这样,一个BCD字节(8位)可以表示两个十进制数字。原创 2023-12-25 20:30:20 · 731 阅读 · 0 评论 -
嵌入式——下载&仿真&调试
但是代码单步执行,断点调试的思想要进行吸收,高手从来不依赖于工具,因为整个代码运行流程应该已经在脑中跑了很多遍,哪里可能出问题,一个简单的log日志通常即可辨明。但是,目前主流的MCU (ARM全系, C51等等)都已内部支持了SW/JTAG调试,因此,仿真需求逐渐被真机调试所替代,企业开发越来越少用到仿真。ARM调试器是一种用于调试ARM架构微处理器或微控制器的工具,它通常与硬件调试接口(如JTAG或SWD)结合使用,允许开发人员观察、分析和调试他们的代码。功能较为复杂,可以用于多个设备的调试和测试。原创 2023-12-25 20:26:39 · 912 阅读 · 0 评论 -
嵌入式开发——PWM高级定时器
点亮8个灯,采用pwm的方式。原创 2023-12-24 21:16:20 · 469 阅读 · 0 评论 -
嵌入式开发——DMA外设到内存
每传输一个字节数据,地址是否需要增长。这里包含了源地址是否需要增长,也包含了目标地址是否需要增长。源地址和目标地址都是提前配置好的,当传输时,就会从源地址将数据传递给目标地址。实现串口的数据接收,要求采用dma的方式。串口中,寄存器地址不变,大小不变,数据宽度表示一次传递多上个bit。传输了多少个数据宽度的数据。原创 2023-12-24 21:13:46 · 1262 阅读 · 1 评论 -
嵌入式 开发——DMA内存到外设
每传输一个字节数据,地址是否需要增长。这里包含了源地址是否需要增长,也包含了目标地址是否需要增长。源地址和目标地址都是提前配置好的,当传输时,就会从源地址将数据传递给目标地址。实现串口的发送数据, 要求采用dma的方式。串口中,寄存器地址不变,大小不变,数据宽度表示一次传递多上个bit。传输了多少个数据宽度的数据。原创 2023-12-24 21:09:52 · 514 阅读 · 0 评论 -
嵌入式开发——DMA内存到内存
将src这个数组的值,赋值到dst这个数组中,不可以采取直接赋值的方式,需要通过DMA将数据进行传递。每传输一个字节数据,地址是否需要增长。这里包含了源地址是否需要增长,也包含了目标地址是否需要增长。这里主要指的是在配置DMA的源和目标的时候,我们无法给出一个具体的源地址和源的数据长度。源地址和目标地址都是提前配置好的,当传输时,就会从源地址将数据传递给目标地址。通常,dma数据传输完成,我们也是可以知道的。可以通过中断的方式获取。初始化时,不再初始化源地址和要传输的长度。传输了多少个数据宽度的数据。原创 2023-12-24 21:04:49 · 626 阅读 · 0 评论 -
嵌入式开发——DMA
CPU执行过程中,通过总线,到SRAM中取数据CPU将取的数据,按照逻辑处理顺序进行执行逻辑中用到了外设部分,CPU会将对应的数据通过总线传递给外设这里的每一份数据都是这么个操作流程。原创 2023-12-24 20:59:08 · 1235 阅读 · 0 评论 -
嵌入式开发——PWM多通道输出
点亮T2定时器下的多个通道的灯。点亮8个灯,采用pwm的方式。原创 2023-12-24 20:55:50 · 614 阅读 · 0 评论 -
Keil中文报错提示为: [-Winvalid-source-encoding]问题解决
这种处理方式只是隐藏了这个错误,并没有将错误真正解决掉。不过这种错误不会影响系统运行。原创 2023-12-24 13:26:40 · 1531 阅读 · 0 评论 -
GD32F4时钟树查询
架构图时钟树原创 2023-12-21 20:54:50 · 426 阅读 · 0 评论 -
GD32F4定时器查询
类型编号引脚计数模式互补和死区正极性负极性高级(4通道)定时器0复用AF1倍频2CH0向上向下中央对齐PA8PE9PE8 ONCH1PA9PE11CH2PA10PE13PE12 ONCH3PA11,PE14BRKINETIPE7定时器7复用AF3倍频2CH0向上向下中央对齐PC6PI15PH13 ONCH1PC7PI6PH14 ONCH2PC8PI7。原创 2023-12-21 20:52:31 · 427 阅读 · 0 评论 -
嵌入式中的基本定时器
根据结构框图,我们可以知道,14个Timer中,有的采用APB1,有的采用APB2。值得注意的是,后面有进行减一操作,原因是,这个周期计数值最终会配置到芯片的寄存器中,芯片的寄存器计数累加的起点是0,不是1,所以我们需要减1。APB外设总线,其实和系统时钟总线是会存在倍差的,我们的代码执行的依据是系统时钟。简单理解,天上一年,地下一天。分频计数,是(分频系数 - 1),这个是写入寄存器的,因为是从0开始计数,所以要减1。周期和频率是反的,以上面的说法为例,0.2秒是一个周期,1秒钟就有5个这样的周期。原创 2023-12-21 20:51:19 · 1029 阅读 · 0 评论