0.开发环境(工具)
Vscode 、platformio、arduino、STM32F103C8T6、USB-TTL
引脚连接:STM32直接设置为烧录模式即可,烧录完成后会自动运行程序。
1.点灯加串口输出调试
注意事项:每次上传程序前,需要按一下复位键。
#include <Arduino.h>
#define ledPin PC13
HardwareSerial Serial1(PA10, PA9); // 将串口1的管脚指定到PA10(RX),PA9(TX)引脚上
int i = 0;
void setup()
{
Serial1.begin(115200);
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
Serial1.println(i++);
}
platformio.ini文件配置
[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = arduino
upload_port = COM17
monitor_port = COM17
monitor_speed = 115200
upload_protocol = serial
2.FreeRTOS开发STM32
添加相关库函数
测试程序:板载LED闪烁,同时进行串口输出
#include <Arduino.h>
#include <STM32FreeRTOS.h>
#define ledPin PC13
HardwareSerial Serial1(PA10, PA9); // 将串口1的管脚指定到PA10(RX),PA9(TX)引脚上
int i = 0;
void test1(void *pt)
{
pinMode(ledPin, OUTPUT);
while (1)
{
digitalWrite(ledPin, HIGH);
vTaskDelay(100);
digitalWrite(ledPin, LOW);
vTaskDelay(100);
Serial1.println(i++);
}
}
void setup()
{
Serial1.begin(115200);
xTaskCreate(test1, "", 1024, NULL, 1, NULL);
vTaskStartScheduler(); // 开启任务调度,这条语句必须加,否则程序无法正常执行
vTaskDelete(NULL);
}
void loop()
{
}
vTaskStartScheduler()的作用
vTaskStartScheduler()是FreeRTOS实时操作系统中的一个函数,它的作用是启动任务调度器。在FreeRTOS中,任务调度器负责按照任务的优先级和调度策略来调度任务的执行。
具体而言,vTaskStartScheduler()函数会初始化FreeRTOS的内部数据结构,并开始任务调度器的运行。一旦调用了该函数,任务调度器会按照任务的优先级和调度策略开始调度任务的执行。它会根据每个任务的优先级,以抢占或协作的方式分配处理器时间片给不同的任务,从而实现任务的并发执行。
vTaskStartScheduler()函数通常是在系统初始化过程的最后被调用,它标志着系统进入多任务运行状态。在调用该函数之前,需要先创建并初始化好各个任务,并设置好任务的优先级。
需要注意的是,vTaskStartScheduler()函数是一个永不返回的函数,一旦任务调度器开始运行,它将控制整个系统的执行,直到发生严重错误或调用了特殊的函数来停止任务调度器的运行。
总结起来,vTaskStartScheduler()函数的作用是启动FreeRTOS任务调度器,让各个任务按照优先级和调度策略并发执行。