stm32 手工创建带FreeRTOS的Keil工程

创建新工程,选择设备

勾选CMSIS->CORE, Device->Startup

配置工程

勾选Use MicroLIB

编译器设置:

连接器设置:

建立文件夹和拷贝文件,其中Core(系统文件),Drivers(HAL,LL驱动),Middlewares(FreeRTOS文件)为使用CubeMX创建工程时生成的文件夹,按需拷贝。app为应用程序目录

Core\Inc 最小目录文件

Core\Src 最小目录文件

工程配置编译器设置项include路径添加:

工程创建group和添加文件

注:group app 为应用程序目录

修改main.h, 添加必要的ll层驱动头文件

#include "stm32wlxx_hal.h"

#include "stm32wlxx_ll_usart.h"

#include "stm32wlxx_ll_gpio.h"

 

修改stm32wlxx_hal_conf.h, 启用必要的模块

#define HAL_MODULE_ENABLED

/*#define HAL_ADC_MODULE_ENABLED   */

/*#define HAL_COMP_MODULE_ENABLED   */

/*#define HAL_CRC_MODULE_ENABLED   */

/*#define HAL_CRYP_MODULE_ENABLED   */

/*#define HAL_DAC_MODULE_ENABLED   */

/*#define HAL_GTZC_MODULE_ENABLED   */

/*#define HAL_HSEM_MODULE_ENABLED   */

/*#define HAL_I2C_MODULE_ENABLED   */

/*#define HAL_I2S_MODULE_ENABLED   */

/*#define HAL_IPCC_MODULE_ENABLED   */

/*#define HAL_IRDA_MODULE_ENABLED   */

/*#define HAL_IWDG_MODULE_ENABLED   */

/*#define HAL_LPTIM_MODULE_ENABLED*/

/*#define HAL_PKA_MODULE_ENABLED   */

/*#define HAL_RNG_MODULE_ENABLED   */

/*#define HAL_RTC_MODULE_ENABLED   */

/*#define HAL_SMARTCARD_MODULE_ENABLED   */

/*#define HAL_SMBUS_MODULE_ENABLED   */

/*#define HAL_SPI_MODULE_ENABLED   */

/*#define HAL_SUBGHZ_MODULE_ENABLED*/

#define HAL_TIM_MODULE_ENABLED

/*#define HAL_UART_MODULE_ENABLED   */

/*#define HAL_USART_MODULE_ENABLED   */

/*#define HAL_WWDG_MODULE_ENABLED   */

/*#define HAL_EXTI_MODULE_ENABLED*/

#define HAL_CORTEX_MODULE_ENABLED

#define HAL_DMA_MODULE_ENABLED

#define HAL_FLASH_MODULE_ENABLED

#define HAL_GPIO_MODULE_ENABLED

#define HAL_PWR_MODULE_ENABLED

#define HAL_RCC_MODULE_ENABLED

 

main.c 程序

#include "stdio.h"

#include "main.h"
#include "cmsis_os.h"

#include "dev_clock.h"
#include "dev_io.h"
#include "dev_uart1.h"

const osThreadAttr_t defaultTask_attributes = {
  .name = "defaultTask",
  .priority = (osPriority_t) osPriorityNormal,
  .stack_size = 128 * 4
};

void StartDefaultTask(void *argument);

int main(void)
{	
	HAL_Init();	

	clock_init();
	io_init();
    
	uart1_init();
	uart1_on();

    osKernelInitialize(); 

    osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
    osKernelStart();
		
	while (1)
	{		
	}
}

void StartDefaultTask(void *argument)
{	
    for(;;)
    {       
        printf("loop\r\n");
        osDelay(1000);
    } 
}

// stm32wlxx_hal_timebase_tim(FreeRTOS使用的定时器) 中,使用的是TIM16,因此在这里加上相应的中断处理及回调函数
extern TIM_HandleTypeDef htim16;

void TIM16_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&htim16);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if (htim->Instance == TIM16) {
    HAL_IncTick();
  }  
}

void Error_Handler(void)
{  
  __disable_irq();
  while (1)
  {
  } 
}

F7编译

F8下载

运行:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值