【STM32-HAL库】立创梁山派天空星版新建工程并点灯(GD32F407VET6)

本文详细介绍了如何使用CubeMX创建GD32F407VET6工程,配置SYS和GPIO,设置时钟树,以及在Keil5中编写和下载代码,包括LED控制和ST-Link下载器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、新建cubeMX工程

打开cubeMX在主页面点击“ACCESS TO MCU SELECTOR”

梁山派天空星使用的是GD32F407VET6,平替STM32F407VET6,所以在cubeMX中搜索F407VET6

在“System Core”中找到“SYS”,将“Debug”选择为“Serial Wire”

由于我拿到的版本没有焊接低速时钟晶振

所以在cubemx中我们开启“HSE”即可

由图可知PB2连接了LED,且为高电平点亮。

直接选择PB2为输出模式

由原理图可知该LED接了一个下拉电阻,所以在GPIO中要更改PB2的引脚配置

配置时钟树,在HSE中输入“8”,“HCLK”中输入提示的最大值,点击回车

更改工程配置

点击生成代码后,等待生成代码,之后点击“Open Project”即可打开keil5

二、配置keil5

keil5 GD32F4及STM32F4芯片包 提取码:6666icon-default.png?t=N7T8https://pan.baidu.com/s/1luEB42NA5G9KLwTp4XYBHA

双击芯片包,点击“Next”

打开keil5工程

在主循环中加入以下代码


      HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
      HAL_Delay(200);
      HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
      HAL_Delay(200);

点击魔术棒,更改编译器版本

三、配置下载器并下载

如图所示选择,下载器选择“ST-Link”

点击编译并下载

提示芯片有问题,直接点击确定,即可正常下载。

点击中间按键“reset”进行复位,即可看到绿色LED闪烁

### 梁山开发板 FreeRTOS 配置方法 对于梁山开发板,可以利用其集成的MDK-RTE功能来快速添加FreeRTOS组件。以下是具体的配置说明: 通过MDK-RTE工具,在项目设置界面中找到勾选FreeRTOS组件即可完成初始化配置[^2]。需要注意的是,默认情况下 `FreeRTOSConfig.h` 文件可能启用了某些不必要的功能模块。这些未使用的功能可能会引发编译警告或错误。解决办法是定位到该头文件,关闭暂不需用的功能选项。 #### 示例代码调整 假设已经完成了上述操作,则可以通过如下方式验证基本任务调度是否正常运行: ```c #include "FreeRTOS.h" #include "task.h" void vTaskFunction(void *pvParameters) { while (1) { // 执行任务逻辑 configASSERT(uxTaskGetNumberOfTasks() > 0); vTaskDelay(pdMS_TO_TICKS(500)); // 延迟500ms } } int main(void) { xTaskCreate(vTaskFunction, "Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); vTaskStartScheduler(); // 启动多任务调度器 for (;;); // 不应到达此处 } ``` --- ### 天空 STM32F407VET6 本 FreeRTOS 示例代码 针对天空开发板(基于STM32F407芯片),建一个简单的FreeRTOS工程通常涉及以下几个步骤: 1. **安装必要的软件环境** 使用官方推荐的Keil MDK或其他IDE建基础工程框架。 2. **导入FreeRTOS** 参考文档中的指引将FreeRTOS源码目录加入至工程路径下[^3]。 3. **编写测试程序** 下面提供一段用于验证的任务切换演示代码片段: ```c // 定义两个独的任务函数原型声明 void TaskBlinkLED1(void* pvParameters); void TaskBlinkLED2(void* pvParameters); int main(void) { SystemInit(); // 建第一个任务 xTaskCreate(TaskBlinkLED1, "LED1_TASK", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL); // 建第二个任务 xTaskCreate(TaskBlinkLED2, "LED2_TASK", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL); // 开始执行实时操作系统内核管理下的各线程活动周期循环过程... vTaskStartScheduler(); return 0; // 正常退出点理论上不可达 } // 实现具体行为定义部分——交替点亮不同编号led灯泡模拟效果展示用途而已哦~ void TaskBlinkLED1(void* pvParameters) { TickType_t lastWakeTime = xTaskGetTickCount(); const TickType_t delayPeriod = pdMS_TO_TICKS(1000UL / portTICK_PERIOD_MS); GPIO_InitTypeDef LED_Pin; __HAL_RCC_GPIOA_CLK_ENABLE(); // 替换实际端口使能语句 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, RESET); // 初始化状态设低电平熄灭初始态 while(true){ HAL_Delay(250); HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); vTaskDelayUntil(&lastWakeTime,delayPeriod); } } void TaskBlinkLED2(void* pvParameters) { TickType_t lastWakeTime = xTaskGetTickCount(); const TickType_t delayPeriod = pdMS_TO_TICKS(1000UL / portTICK_PERIOD_MS); GPIO_InitTypeDef LED_Pin; __HAL_RCC_GPIOB_CLK_ENABLE(); // 替换实际端口使能语句 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, SET); // 初始高亮显示区别于另一盏灯具对象实例化表达形式上有所差异罢了哈~ while(true){ HAL_Delay(500); HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9); vTaskDelayUntil(&lastWakeTime,delayPeriod); } } ``` 此段脚本展示了如何分别控制两组不同的硬件资源按照预设计时间间隔规律闪烁动作现象呈现给观察者视觉感官体验感受啦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值