创建新工程,选择设备
勾选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下载
运行: