- 博客(16)
- 收藏
- 关注
原创 【FreeRTOS】 任务的挂起与恢复
在实际应用中,有的时候不能直接删除任务,而是挂起任务“暂停”一会,这个时候就需要以下API函数来该和恢复任务。
2025-06-01 20:24:44
953
1
原创 【FreeRTOS】 任务的静态创建和删除
在完成第一步编译工程会报两个错误查看开启任务调度器的源代码,发现在vTaskStartScheduler()函数体内需要调用vApplicationGetIdleTaskMemory()函数进行空闲任务的内存申请向下划拉,发现在vTaskStartScheduler()函数体内还需要调用xTimerCreateTimerTask()创建软件定时器。
2025-05-30 16:34:38
895
原创 【FreeRTOS】 任务的动态创建和删除
编写创建和删除进程的相关代码,包括LED1和LED2的闪烁,按键捕获,在按键按下后删除LED1进程。上电后 LED1每隔1秒闪烁一次 LED2每隔0.6秒闪烁一次。按下按键后 删除LED1闪烁进程 LED1停止闪烁。[STM32+FreeRTOS]动态任务创建。动态创建的任务会立刻进入就绪态。进行相关定义和文件包含。
2025-05-24 23:51:55
544
原创 【FreeRTOS】 将FreeRTOS移植到STM32F103C8详细教程
注释函数SVC_Handler(void)和PendSV_Handler(void)在main.c中添加如下代码(LED.h和LED.c代码自行准备)在SysTick_Handler(void)函数内添加代码。在FreeRTOS/source文件组内添加源码文件。将FreeRTOSConfig.h添加到User组内。在FreeRTOS/port文件组内添加移植文件。将全文代码删除并添加如下代码。报错别着急,下一步解决报错。添加如下代码声明外部函数。小灯能正常闪烁就是没问题。
2025-05-24 17:40:58
2149
原创 【STM32】 使用ESP8266与服务器进行通信
看了很久的江科大课程了,陆陆续续也学了不少东西,就想着做个类似课设的小项目,尽量多的用上学到的东西。
2025-05-20 23:02:00
2322
原创 【STM32】 使用硬件SPI与W25Q64通信
大致内容与上一篇链接:类似,但是使用的STM32的硬件SPI。在MySPI中也不需要定义手动读写高低电平的代码,而是有底层硬件电路完成相关工作。按照上图对硬件SPI的控制寄存器进行初始化即可完成相应功能。
2025-05-20 19:16:03
382
原创 【STM32】 使用软件SPI与W25Q64通信
SPI是一种全双工的同步时序通信,使用两根数据线MOSI和MISO,一根时钟线SCK和片选线SS。但在一主多从时需要挂载多根片选线使用的通讯方式,本质上将通讯双方的移位寄存器连接到一起形成一个“循环队列”,在移动8位后完成了主机与从机的数据交换虽然分模式,但大致环节相同,模式0如图首先拉低片选信号,在SCK低电平时,主机向MOSI写信号,从机向MISO写信号;SCK高电平时,主机读MISO写信号,从机读MOSI信号;如此8次完成一个字节的交换。
2025-05-20 19:07:11
672
原创 【STM32】 使用硬件I2C与MPU6050通信
使用STMF103C8内置的I2C与MPU6050进行通讯,对相关寄存器进行相关配置,并读取六轴传感器的值在OLED显示。I2C原理在这篇博客中已经说明,这里不再赘述。
2025-05-04 13:26:04
494
原创 【STM32】 使用软件模拟I2C与MPU6050通信
使用软件模拟I2C时序写MPU6050寄存器进行相关配置,并读取六轴传感器的值在OLED显示使用STM32F103C8的PB10、PB11引脚模拟SCL和SDA,产生以上波形。因为I2C为同步半双工通信,使用软件模拟不会有太大问题。I2C总线空闲时需要保持为高电平。但是在MPU6050上已经内置上拉电阻,所以PB10、PB11设置为复用开漏输出。低耦合高内聚,先写好底层的I2C代码,再写MPU6050的控制与通讯代码,最后在主函数中调用。
2025-05-04 12:53:14
696
原创 【STM32】 串口+DMA非定长数据包收发_使用串口空闲中断USART_IDLE
使用DMA将串口收到的数据从串口数据寄存器转运到预定义的数组当中。在数据接收完成时触发USART串口空闲中断,在中断服务程序中初始化DMA1通道5,并使能DMA1通道4将数据转运到串口数据寄存器中。在DMA1通道4的数据发生完成时触发发送完成中断初始化通道4并使能通道5。由图可得STM32F103C8中DMA1与USART1的连接,因此使用DMA1通道5转运接收数据,并用DMA1通道4转运发送数据,触发方式设置为USART硬件触发。
2025-04-25 17:28:18
476
原创 【STM32】 串口+DMA定长数据包收发_使用DMA中断DMA_IT_TC4/5
使用DMA将串口收到的数据从串口数据寄存器转运到预定义的数组当中,接收完毕后触发DMA转运完成中断,在中断服务程序中进行配置,将数据转运到串口数据寄存器中。由图可得STM32F103C8中DMA1与USART1的连接,因此使用DMA1通道5转运接收数据,并用DMA1通道4转运发送数据,触发方式设置为USART硬件触发。
2025-04-25 17:28:09
619
原创 【STM32】 AD多通道+DMA转运
打开GPIO、ADC、DMA时钟初始化GPIO的PA0~4为模拟输入模式初始化ADC为软件触发、连续扫描模式初始化DMA为硬件触发、自动重装。
2025-04-10 16:10:56
325
原创 【STM32】Protues 8.9 仿真 PWMI测频率
使能GPIOA时钟与TIM时钟->PA6设置为上拉输入->TIM3设置输入为内部时钟源->初始化时基单元TimeBase->使用PWMIConfig同时配置TIM3的通道1与通道2分别捕获上升沿与下降沿->启动定时器。使能GPIOA时钟与TIM时钟->PA0设置为复用推挽输出->TIM2设置输入为内部时钟源->初始化时基单元TimeBase->设置输出比较模式->启动定时器。使用PA0产生PWM波,使用PA6捕获波形,并使用定时器使用PWMI模式计算频率与占空比。如果有大佬请不吝赐教😭。
2025-03-31 13:58:08
415
原创 【STM32】Protues 8.9 仿真PWM控制直流电机
使用PWM_Init()函数初始化引脚和定时器,定时器TIM2的第三路输出为PA2。PA3接ENA,使用TIM2基本定时器的通道三输出PWM波形控制电机转速。单片机无法承载直流电机,使用L298作为直流电机的驱动。Motor_Init()函数初始化引脚PA0 PA1。Motor_SetSpeed()函数对速度进行设置。使用PWM_SetCompare3()设置比较值。Key_Init()初始化相关引脚及寄存器。在中断服务程序中对速度进行更改。在主程序中进行相关引脚的初始化。在循环中调用显示及速度设置程序。
2025-03-25 19:33:14
1701
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅