赞
踩
Vscode 、platformio、arduino、STM32F103C8T6、USB-TTL
引脚连接:STM32直接设置为烧录模式即可,烧录完成后会自动运行程序。
注意事项:每次上传程序前,需要按一下复位键。
- #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
添加相关库函数
测试程序:板载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()是FreeRTOS实时操作系统中的一个函数,它的作用是启动任务调度器。在FreeRTOS中,任务调度器负责按照任务的优先级和调度策略来调度任务的执行。
具体而言,vTaskStartScheduler()函数会初始化FreeRTOS的内部数据结构,并开始任务调度器的运行。一旦调用了该函数,任务调度器会按照任务的优先级和调度策略开始调度任务的执行。它会根据每个任务的优先级,以抢占或协作的方式分配处理器时间片给不同的任务,从而实现任务的并发执行。
vTaskStartScheduler()函数通常是在系统初始化过程的最后被调用,它标志着系统进入多任务运行状态。在调用该函数之前,需要先创建并初始化好各个任务,并设置好任务的优先级。
需要注意的是,vTaskStartScheduler()函数是一个永不返回的函数,一旦任务调度器开始运行,它将控制整个系统的执行,直到发生严重错误或调用了特殊的函数来停止任务调度器的运行。
总结起来,vTaskStartScheduler()函数的作用是启动FreeRTOS任务调度器,让各个任务按照优先级和调度策略并发执行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。