自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 spi通信

/当MISO为1时,置变量指定位为1,当MISO为0时,不做处理,指定位为默认的初值0。//定义接收的数据,并赋初值0x00,此处必须赋初值0x00,后面会用到。//拉高SCK,上升沿移出数据。可以对数据进行两次逻辑取反,作用是把非0值统一转换为1,即:!spi有四根通信线,时钟,片选,收,发,四种工作模式,一主多从。

2025-05-04 15:07:09 309

原创 i2c通信

一主多从,一个时钟线scl,一个通信线sda。在硬件中,记住等待事件,确保当前事件发送完成。(MPU6050 返回 1 字节)。可以采用软件或者硬件i2c。

2025-05-04 10:27:01 219

原创 DMA转运数据

/数据对齐,选择右对齐。这里一般都使用右对齐。使用dma转运数据时间,注意数据对齐。

2025-04-30 16:03:42 208

原创 关于AD讲解

/ 启动后会自动连续运行。// ADC触发DMA请求。

2025-04-29 21:45:08 380

原创 编码器函数TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Ri

在 **`TIM_EncoderMode_TI12`(正交编码模式)** 下,STM32 硬件会自动检测 **TI1 和 TI2 的边沿跳变**(包括上升沿和下降沿),并根据它们的相位关系判断方向。如果需要更精确的控制(如仅单边沿计数),需结合 **编码器模式(`TIM_EncoderMode_TI1` 或 `TIM_EncoderMode_TI2`)** 和 **滤波设置** 来实现。- **`TIM_ICPolarity_Falling`** → 信号反相(相当于交换了编码器的A/B相)。

2025-04-29 16:52:28 438

原创 预分频器和时钟分频

好的,我用更简单的方式重新解释 **`TIM_ClockDivision`(时钟分频)**,并结合实际场景帮你彻底理解它和 `TIM_Prescaler` 的区别。| **典型值** | 例如 `72-1`(72分频) | `DIV1`(默认)、`DIV2`、`DIV4` || **作用对象** | 定时器的**计数时钟** | 外部信号的**采样时钟** |- **不改变计数速度**,只影响定时器对**外部信号的采样稳定性**。

2025-04-29 14:52:17 658

原创 空闲任务和钩子函数

以下是一个完整的 FreeRTOS 空闲任务钩子函数(Idle Hook)的示例代码,展示了如何在空闲任务中执行自定义逻辑,同时确保空闲任务不会进入阻塞状态。- 在钩子函数中,`idleCount` 用于统计空闲循环的次数,并每 1000 次打印一次计数。- 可以在钩子函数中执行低优先级的后台任务,但不要调用阻塞函数(如 `vTaskDelay`)。- 注意不要在钩子函数中调用阻塞函数,否则会导致空闲任务进入阻塞状态,影响系统的正常运行。- 不要在钩子函数中调用阻塞函数,否则会导致空闲任务进入阻塞状态。

2025-03-24 11:16:25 583

原创 在 FreeRTOS 中,创建任务

创建任务时需要指定优先级,任务运行期间可以通过 `vTaskPrioritySet()` 动态调整优先级。使用 `xTaskCreate()` 或 `xTaskCreateStatic()` 函数来创建任务。TaskHandle_t *pxCreatedTask // 任务句柄(可选)- 使用 `xTaskCreate()` 创建任务,指定任务函数、堆栈大小和优先级。- `pvTaskCode`:任务函数的指针,任务的具体逻辑在此函数中实现。

2025-03-21 14:19:12 682

原创 任务句柄TaskHandle_t xTaskHandle

如果传递 `&xTaskHandle`,`xTaskCreate()` 会将新创建任务的任务句柄存储到 `xTaskHandle` 变量中。- `&xTaskHandle` 是任务句柄变量的地址,传递给 `xTaskCreate()` 以获取新创建任务的任务句柄。- **`= NULL`** 表示将 `xTaskHandle` 初始化为 `NULL`,即初始时它不指向任何任务。- **`xTaskHandle`** 是一个变量,类型为 `TaskHandle_t`,用于存储任务句柄。

2025-03-21 11:16:05 655

原创 void *通用指针

`void *` 是一种无类型指针,可以指向任何数据类型(如 `int`、`float`、结构体、数组等)。`void *` 是 C 语言中的一种特殊指针类型,称为 **通用指针(void pointer)**。// 接受 void *,可以释放任意类型的内存。- 由于 `void *` 是无类型指针,编译器不知道它指向的数据类型,因此不能直接解引用。- 使用 `void *` 时需要小心类型转换,确保转换后的类型是正确的。- `void *` 是 C 语言中的通用指针,可以指向任意类型的数据。

2025-03-20 19:27:22 440

原创 返回地址(Return Address)和现场(Context)

**特性** | **返回地址** | **现场** || **示例** | 函数调用后返回的地址 | 任务切换时保存的 PC、PSR、R0-R12 等 || **定义** | 函数调用后需要返回的指令地址 | 任务执行时处理器的完整状态 |

2025-03-19 14:35:13 433

原创 FreeRTOS栈中保存的内容详解

在 FreeRTOS 中,任务的栈(Stack)用于保存任务的上下文信息、局部变量、返回地址等。FreeRTOS 的栈中保存了任务的返回地址、局部变量和处理器现场。在任务切换时,FreeRTOS 会保存当前任务的现场到其栈中,然后恢复下一个任务的现场。- 将 TaskA 的寄存器、PC、PSR 等压入 TaskA 的栈中。- 保存 TaskA 的栈指针到 TaskA 的 TCB 中。- 从 TaskB 的 TCB 中获取 TaskB 的栈指针。- 从 TaskB 的栈中弹出寄存器值,恢复处理器的状态。

2025-03-19 14:33:58 432

原创 关于Cpp引用

不合法合法 —— 编译器自动优化func(10);return 0;

2024-11-06 15:16:57 472

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除