- 博客(33)
- 收藏
- 关注
原创 SPI通信
四根通信线:SCK/SCLK/CLK/CK(Serial Clock))、 MOSI/DO (Master Output SlaveInput/Data Output) 、MISO/DI (Master Input Slave Output) 、SS/NSS/CS (Slave Select/Not Slave Select/Chip Select)(一个从机一条ss线,ss置低电平开始通信)从机上的DI要连主机的MOSI同步,全双工支持总线挂载多设备(一主多从)
2025-03-31 14:21:33
548
原创 I2C总线协议
I2C是双向二线制(SDA数据线和SCL时钟线)同步串行总线同步:数据的传输是在一个共同的时钟信号控制下进行的,发送方和接收方都根据这个时钟信号来确定数据的发送和接收时机串行:表示数据是一位一位依次传输的,而不是像并行总线那样多个数据位同时传输。串行传输方式减少了硬件引脚的数量,但传输速度相对并行传输来说可能会慢一些。在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送。
2025-03-30 16:58:31
652
原创 通信协议之串口
点对点,只能两设备通信只需单向的数据传输时,可以只接一根通信线当电平标准不一致时,需要加电平转换芯片(一般从控制器出来的是信号是TTL电平)地位先行。
2025-03-29 20:35:27
723
原创 FreeRTOS之调试与优化
接着利用vTaskGetRunTimeStats:获得任务的运行信息,形式为可读的字符串。内存越界经常发生在堆的使用过程中,堆,就是使用malloc得到的内存。vTaskList :获得任务的统计信息,形式为可读的字符串。printf:FreeRTOS 工程里使用了 microlib,里面实现了 printf 函数。2:使用简单的栈边界检查方法,并且在任务切换时也进行检查,检测更频繁。pcTaskName:指向发生栈溢出的任务名称的字符串指针。xTask:指向发生栈溢出的任务句柄。0:禁用栈溢出检测功能。
2025-03-17 07:30:00
645
原创 FreeRTOS之资源管理
任务中使用:taskENTER_CRITICA()/taskEXIT_CRITICAL()要独占式地访问临界资源,有3种方法。屏蔽了中断,不会有任务调度产生。
2025-03-17 00:15:00
121
原创 FreeRTOS之中断管理
如果这个硬件中断的处理是非常耗费时间,在ISR中尽快做些清理、记录工作,然后触发某个任务,更复杂的事情放在任务中处理,这种处理方式叫"中断的延迟处理"(Deferring interrupt processing)
2025-03-16 09:38:33
501
原创 FreeRTOS之软件定时器
指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期(period)指定类型,定时器有两种类型:一次性(One-shot timers):这类定时器启动后,它的回调函数只会被调用一次;可以手工再次启动它,但是不会自动启动它。自动加载定时器(Auto-reload timers ):这类定时器启动后,时间到之后它会自动启动它;这使得回调函数被周期性地调用。运行(Running、Active):运行态的定时器,当指定时间到达之后,它的回调函数会被调用。
2025-03-16 00:30:00
1116
原创 FreeRTOS之任务通知(Task Notifications)
队列、信号量、事件组等等方法时,并不知道对方是谁。使用任务通知时,可以明确指定:通知哪个任务优势使用任务通知来发送事件、数据给某个任务时,效率更高。比队列、信号量、事件组都有大的优势使用其他方法时都要先创建对应的结构体,使用任务通知时无需额外创建结构体,节省内存限制不能发送数据给 ISR,但是 ISR可以使用任务通知的功能,发数据给任务使用队列、信号量、事件组时,数据保存在这些结构体中,其他任务、ISR 都可以访问这些数据。
2025-03-15 13:31:30
818
原创 FreeRTOS之事件组
事件组的每一位表示一个事件每一位事件的含义由我们决定,比如:Bit0 表示用来串口是否就绪,Bit1表示按键是否被按下值为 1 表示事件发生了,值为 0 表示事件没发生一个或多个任务、ISR 都可以去写这些位;一个或多个任务、ISR 都可以去读这些位可以等待某一位、某些位中的任意一个,也可以等待多位的高8位留给内核使用,只能用其他的位来表示事件。
2025-03-15 10:15:00
857
原创 FreeRTOS之互斥量
互斥量也被称为互斥锁用于解决优先级反转的问题信号量实现优先级继承和优先级恢复的功能其实也是信号量,各类操作函数,比如删除、give/take,跟一般是信号量是一样的要注意的是,互斥量不能在 ISR 中使用。
2025-03-14 20:09:30
478
原创 FreeRTOS之信号量
信号量本质上也是一个队列,只不过不涉及数据传输,只涉及数据个数的加加减减,换句话说就是传递状态。使用信号量效率更高、更节省内存分类计数型信号量(Counting Semaphores):量没有限制二进制信号量(Binary Semaphores):量只有 0、1 两个取值支持的动作:"give"给出资源,计数值加 1"take"获得资源,计数值减 1。
2025-03-14 16:54:24
1229
原创 FreeRTOS之队列集
一个任务可能需要从多个不同的数据源接收数据,如果没有队列集,任务需要在多个队列之间进行轮询,可能导致任务在某些情况下无法及时响应。使用队列集,任务可以以阻塞的方式等待这队列中的任意一个有数据到来,而不需要分别对每个队列进行轮询。队列集本质上也是一个队列。
2025-03-12 21:07:19
314
原创 FreeRTOS之队列
在 FreeRTOS 中,队列(Queue)是一种非常重要的通信机制,用于在任务之间、任务与中断服务程序之间传递数据。可以把数据写到队列头部,也可以写到尾部,这些函数有两个版本:在任务中使用、在ISR 中使用。使用 xQueueReceive()函数读队列,读到一个数据后,队列中该数据会被移除。如果队列中没有数据,那么"偷看"时会导致阻塞;一旦队列中有数据,以后每次"偷看"都会成功。如果想让队列中的数据供多方读取,读取时不要移除数据,那么可以使用"窥视"函数有两个版本:在任务中使用、在 ISR 中使用。
2025-03-12 12:08:32
529
原创 FreeRTOS之内存管理
如果想使用这个钩子函数: 在 FreeRTOSConfig.h 中,把configUSE_MALLOC_FAILED_HOOK 定义为 1, 提供 vApplicationMallocFailedHook 函数, pvPortMalloc 失败时,才会调用此函数。返回程序运行过程中,空闲内存容量的最小值。如果分配内存不成功,则返回值为NULL。在 pvPortMalloc 函数内部。作用:分配内存、释放内存。当前还有多少空闲内存。
2025-03-09 16:04:03
312
原创 FreeRTOS概述
这是该架构最高效的数据类型,32 位架构中,它就是 uint32_t,16 位架构中,它就是 uint16_t,8 位架构中,它就是 uint8_t,BaseType_t 通常用作简单的返回值的类型,还有逻辑值,比如 pdTRUE/pdFALSE。宏的名字是大写,可以添加小写的前缀。前缀是用来表示:宏在哪个文件中定义。函数名的前缀有2部分:返回值类型、在哪个文件定义。
2025-03-09 15:27:16
1013
原创 FreeRTOS创建工程
由于,FreeRTOS 的时基使用的是 Systick,而 STM32CubeMX中默认的 HAL 库时基也是 Systick,为了避免可能的冲突,最好将 HAL 库的时基换做其它的硬件定时器配置系统时钟频率。
2025-03-08 18:17:39
138
原创 基于STM32的逻辑分析仪
比如group3里的channe116~channel23都被禁止后,一次采样就可以得到3字节数据,bit16原来对应channel16,现在对应channel24,以此类推。如果禁止group1,需上报3个字节的数据,如果禁止channel2,仍需上报4个字节(组中所有通道都被禁止了,组对应的字节才不需要采集)由于单片机内存小,速度慢,为了实现最高频率采样,采用汇编代码,并且要测量出汇编代码的执行时间,一条汇编指令耗费的时间。它上报的数据是:先上报最后一个采样的数据,最后上报第1个采样点的数据。
2025-03-08 16:16:12
2323
原创 ARM汇编:从RISC指令集到纯汇编点灯实操
MOV 是数据传送指令,作用是将一个值传送到目标寄存器。这里 r0 是目标寄存器,按指令意图是想把 val 这个值传送给 r0。如在 ADD R0, R1, #5 这条指令中, #5 就是立即数,表示将寄存器 R1 中的值与立即数 5 相加,结果存放到寄存器 R0 中。指令助记符 条件码 S 目标操作数,源操作数1,源操作数2。不用判断一个数是不是立即数,使用伪指令即可。risc 指令简单,有以下特点。由risc特点,汇编指令可分为。这些指令凑在一起,称为指令集。
2025-03-04 00:09:29
1172
原创 DMA..
IDLE 中断是串口通信中的一种中断机制。当串口接收线路在一段时间内没有数据传输,即处于空闲状态时,会触发 IDLE 中断。利用这个特性,可以判断一帧数据是否接收完毕。一般情况下DMA接受没有意义,得加上idle中断。
2025-02-27 21:16:30
231
原创 定时器..
RCR:重复计数次数=RCR+1 重复计数结束后触发更新事件 高级定时器才有。PSC降频公式 ➗(PSC+1) PSC∈【0,65535】CNT:上计数 从0计数到与ARR-1溢出 重新计数。通道1,2是一对3,4是一对 间接信号来自对侧通道。捕捉信号变化,将cnt的值拍照保存到ccr中。pwm1多用 pwm2少用 其他基本用不到。Positive-正极性,信号原样输出。Negative-负极性,信号取反输出。通用定时器 tim2到5 9到14。互补输出一般用来驱动mos管。下计数 从ARR-1计到0。
2025-02-18 15:57:08
244
原创 中断...
4比特共16种,0~15 0是最高优先级分为抢占优先级和子优先级二者总比特数为4(抢占优先级-2位 子优先级-2位 抢占优先级-1位 子优先级-3位 等等)
2025-02-17 15:13:55
209
原创 SPI——串行外设接口
写使能——扇区擦除——等待擦除完成——写使能——页编程——等待完成。时钟极性=低 空闲状态为低电压。时钟极性=高 空闲状态为高电压。适用于高速,双向数据传输场景。
2025-02-15 18:51:15
316
原创 串口——单片机与其他设备建立通信的桥梁
HAL_StatusTypeDef HAL_UART_Transmit ——发送数据,返回HAL_OK表示发送成功 HAL_ERROR-发送出错 HAL_BUSY-串口忙 HAL_ TIMEOUT-发送超时。最后一个参数是超时时间 单位ms,填10意味着qoms后没发送数据 发送停止并返回错误 HAL_MAX_DELAY 为不使用超时时间。HAL_StatusTypeDef HAL_USRT_Receive——接收函数。选择完模式后cubemx自动帮我们选择引脚 自动配置好引脚参数。Tx——数据发送引脚。
2025-02-14 15:43:03
409
原创 but MDK-ARM V5.32project generation have a problem.
离了个大谱,文件路径没中文,前一个工程还能正常生成代码,新建一个就不行了。
2025-02-13 16:09:55
130
原创 GPIO的简单介绍
不接电阻 电平不稳定 少用 特定外设会要求配置为浮空输入。通用推挽输出,通用开漏输出,复用推挽输出,复用开漏输出。上拉输入 下拉输入 浮空输入 模拟输入。接入上拉电阻 默认高电平。接受模拟信号输入时配置。接下拉电阻 默认低电平。
2025-02-13 15:30:17
130
原创 MATLAB下载工具箱
最简单直接的方法就是找到最初安装MATLAB的光盘映像文件,文件格式为.iso,找不到可以下载个everything直接搜索文件格式.iso,进入之后打开setup文件,填写相关信息后就可以选择你要的工具箱下载了。
2025-02-13 01:31:01
164
原创 STM32CubeMX生成代码遇到The Firmware Package (STM32Cube FW_F1 V1.8.6) or one of its dependencies required b
选择对应的型号下载固件库,下载时会让你登录,有账号就登录,没账号要注册,成功登录之后就可以下载了。里面作者说没有要先安装固件库的含义了,原本误解为是没有STM32Cube_FW_F1_V1.8.5类似于这样版本的文件夹。问题解决之后我又回到c盘用户文件夹,发现出现了STM32Cube文件夹,突然理解了。这种情况一般是第一次使用stm32cubemx生成代码时会遇到的,参考了。却发现自己文件夹里根本就没有STM32Cube的文件夹。版本不对的话也可以直接按我上面的方式下载固件库,不用按。
2025-02-13 01:25:50
745
1
空空如也
怎么扩大keil5代码提示的字体
2025-03-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人