STM32CubeMX 是 ST 官方提供的一个代码生成工具,通过图形化的配置快速生成 STM32 的各种片上外设初始代码。STM32CubeMX 提供统一的HAL 和fatfs,freeRTOS,LWIP和USB等中间件。
wirebed使用CubeMx HAL提供的统一接口,可以快速开发SMT32嵌入式程序。
可以参考wirespace中的stm32c8t 例子ledblinky。
wirebed 基本BSP移植
wirebed在stm32cube上运行,需提供3个接口。定义在 bspWire.h文件中。把以下接口实现定义在bspWire.c中
1. 定时器接口
uint32_t wire_timer()
{
return(HAL_GetTick());
}
2. 临界代码保护,禁止中断调用或者RTOS线程切换
void wire_enable_irq()
{
__enable_irq();
}
void wire_disable_irq()
{
__disable_irq();
}
3 trace 接口函数
void wireOuput(uint8_t * data,uint32_t length)
{
HAL_UART_Transmit(&huart1,data,length,1000);
}
wirebed主函数
main文件中引用头文件
/* USER CODE BEGIN Includes */
#include "../../bspWire.h"
#include "../../Tasks/task.h"
/* USER CODE END Includes */
修改main函数如下
/* USER CODE BEGIN 2 */
registerTraceBsp(wireOuput);
registerTimeBsp(wire_timer);
registerEnableIrq(wire_enable_irq);
registerDisableIrq(wire_disable_irq);
taskManagerInit();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
taskManagerRun();
}
/* USER CODE END 3 */
wirebed APP接口
编译具体的task任务,需要自定义接口。建议使用一个bspApp.h提供统一的接口,然后不同的平台提供具体的实现。
说明:也可以在任务代码中直接调用HAL接口函数,但是这样的任务和具体平台紧密耦合,不便于移植。
比如在bspAPP.h 中定义入LED接口
void bsp_led_on(void);
void bsp_led_off(void);
在bspAPP.C中定义实现
#include "../bspApp.h"
#include "gpio.h"
void bsp_led_on(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8, GPIO_PIN_SET);
}
void bsp_led_off(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8, GPIO_PIN_RESET);
}
wirebed 任务实现
这样在wirebed里面则可实现led状态控制。
C源代码
点击菜单setting->Export Code...,如果没有语法错误,自动生成C源码文件,并打开该文件夹。
如果有C语言语法错误,会选中对应的task任务。
在keil项目中,添加对应的文件
globaltype.h
task.h
task.c
m0.c
m1.c
(如果设置是C++,则生成*.cpp文件)