wirebed 配合STM32CubeMX使用

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文件)

猜你喜欢

转载自blog.csdn.net/qq20975717/article/details/81155795