当前位置: 首页 > news >正文

网站长春网站建设做理财网站

网站长春网站建设,做理财网站,网站建设季度考核评价工作总结,抚州网站建设0 开发环境 STM32CubeMX(HAL库)keil 5正点原子探索者STM32F4ZET6LiteOS-develop分支 1 STM32CubeMX创建工程 如果有自己的工程#xff0c;直接从LiteOS源码获取开始 关于STM32CubeMX的安装#xff0c;看我另一篇博客STM32CubeMX安装 工程配置 创建新工程 选择芯片【STM32F…0 开发环境 STM32CubeMX(HAL库)keil 5正点原子探索者STM32F4ZET6LiteOS-develop分支 1 STM32CubeMX创建工程 如果有自己的工程直接从LiteOS源码获取开始 关于STM32CubeMX的安装看我另一篇博客STM32CubeMX安装 工程配置 创建新工程 选择芯片【STM32F407ZET6】(根据自己的板子选)然后双击该芯片进入配置页面 RCC配置时钟信号均来自外部晶振 SYS配置 GPIO配置 GPIO这里配置PF9因为我的开发板上这个引脚接的是LED灯 这里根据原理图设置默认高电平推挽输出命名为LED0 系统时钟设置 生成工程 设置工程名选择存放位置 选择工程文件夹格式【Advanced/Basic】这里选择了Advanced不勾选后面的框 二者的区别 选择编译器【MDK】版本默认即可 ) 这个界面的其他内容默认即可在Code Generator界面设置内容如下图 ) 点击GENERATE CODE生成工程 测试工程 在keil中打开编译运行无错误、无警告表示创建成功 2 LiteOS源码获取 从官网Gitee仓库获取develop分支LiteOS: Huawei LiteOS开源代码官方仓库但是官方这个版本里面文件好像有变动没有移植成功我就找了野火提供的LiteOS源码使用这个成功移植下载地址LiteOS-STM32移植文件这里提供的不是完全的仓库代码只提供了移植所需要的文件 3 移植 在刚才创建的工程目录下创建LiteOS文件夹将刚才下载的文件里面的四个文件夹拉到里面 arch文件夹 需要添加的文件都在arch\arm\arm-m路径下 使用keil在Groups中添加LiteOS/arch分组 添加具体文件如下所示 arch\arm\arm-m\src 目录下的全部文件los_hw.clos_hw_tick.clos_hwi.c arch\arm\arm-m\cortex-m4\keil 目录下的注根据芯片内核选cortex-m文件夹los_dispatch_keil.S在添加文件时需要将文件类型选择为所以类型 kernel文件夹 在Groups中添加LiteOS/kernel分组添加具体文件如下所示【21个】 kernel\base\core 文件夹下全部.c文件los_priqueue.clos_swtmr.clos_sys.clos_task.clos_tick.clos_timeslice.c kernel\base\ipc 文件夹下全部.c文件los_event.clos_mux.clos_queue.clos_sem.c kernel\base\mem\bestfit_little 文件夹下全部.c文件los_heap.clos_memory.clos_membox.clos_memcheck.c kernel\base\mem\common 文件夹下全部.c文件los_memstat.clos_slab.clos_slabmem.c kernel\base\misc 文件夹下全部.c文件los_misc.c kernel\base\om 文件夹下全部.c文件los_err.c kernel\extended\tickless 文件夹下全部.c文件los_tickless.c kernel 文件夹下的 los_init.cOS_CONFIG文件夹 创建LiteOS/config分组只添加target_config.h文件 cmsis 创建LiteOS/cmsis分组只添加tcmsis_liteos.c文件 添加头文件路径 ../LiteOS/arch/arm/arm-m/include ../LiteOS/kernel/include ../LiteOS/kernel/base/include ../LiteOS/kernel/extended/include ../LiteOS/OS_CONFIG ../LiteOS/cmsis ../LiteOS/cmsis/1.0 ../LiteOS/cmsis/2.0 ../LiteOS/cmsis/include5 文件内容调整 target_config 下面所以操作均在target_config.h中进行 芯片型号这里要根据你的开发板型号进行更改 BOARD_SRAM_START_ADDR定义内存的起始地址内存是 RAM运行内存STM32 的 RAM起始地址是 0x20000000。如果不知道 RAM 的起始地址可以在工程中查看 BOARD_SRAM_SIZE_KB定义芯片 RAM 的大小根据对应的芯片进行修改比如STM32F103ZET6 的 RAM 是 64KB那么 BOARD_SRAM_SIZE_KB 可以定义为不超过64K当然一般不能定义到那么大的因为工程本身也是使用了一些内存的系统可管理的内存大小就要小一点根据需要进行调整即可。 stm32f4xx it.c 这个文件需要根据不同的板子来找一般都是stm32f?xx it.c【?是芯片型号】 屏蔽掉PendSV_Handler和SysTick_Handler 在设置里面勾选Use MicroLIB 6 测试移植 编译运行没有错误但是有7个警告这警告都是文件最后一行未换行没有影响 编写代码进行测试将下面的代码替换整个main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body******************************************************************************* attention** Copyright (c) 2023 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include main.h #include gpio.h/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include los_sys.h #include los_task.ph /* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */ static UINT32 AppTaskCreate(void); static UINT32 Creat_Test1_Task(void);static void Test1_Task(void); /* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ UINT32 Test1_Task_Handle; // 定义任务 ID 变量/* USER CODE END 0 *//*** brief The application entry point.* retval int*/ int main(void) {/* USER CODE BEGIN 1 */UINT32 uwRet LOS_OK; //定义一个任务创建的返回值默认为创建成功/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 */uwRet LOS_KernelInit();if (uwRet ! LOS_OK){printf(LiteOS 核心初始化失败失败代码0x%X\n,uwRet);return LOS_NOK;}uwRet AppTaskCreate();if (uwRet ! LOS_OK){printf(AppTaskCreate创建任务失败!失败代码0x%X\n,uwRet);return LOS_NOK;}/* 开启LiteOS任务调度 */LOS_Start();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */ }/*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_OscInitTypeDef RCC_OscInitStruct {0};RCC_ClkInitTypeDef RCC_ClkInitStruct {0};/** Configure the main internal regulator output voltage*/__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM 8;RCC_OscInitStruct.PLL.PLLN 336;RCC_OscInitStruct.PLL.PLLP RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ 4;if (HAL_RCC_OscConfig(RCC_OscInitStruct) ! HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_5) ! HAL_OK){Error_Handler();} }/* USER CODE BEGIN 4 *//******************************************************************** 函数名 AppTaskCreate* 功能说明 任务创建为了方便管理所有的任务创建函数都可以放在这个函数里面* 参数 无 * 返回值 无*************************************************************/ static UINT32 AppTaskCreate(void) {/* 定义一个返回类型变量初始化为LOS_OK */UINT32 uwRet LOS_OK;uwRet Creat_Test1_Task();if (uwRet ! LOS_OK){printf(Test1_Task任务创建失败!失败代码0x%X\n,uwRet);return uwRet;}return LOS_OK; }// 创建任务 static UINT32 Creat_Test1_Task() {//定义一个创建任务的返回类型初始化为创建成功的返回值UINT32 uwRet LOS_OK; //定义一个用于创建任务的参数结构体TSK_INIT_PARAM_S task_init_param; task_init_param.usTaskPrio 3; /* 任务优先级数值越小优先级越高 */task_init_param.pcName Test1_Task;/* 任务名 */task_init_param.pfnTaskEntry (TSK_ENTRY_FUNC)Test1_Task;/* 任务函数入口 */task_init_param.uwStackSize 1024; /* 堆栈大小 */uwRet LOS_TaskCreate(Test1_Task_Handle, task_init_param);/* 创建任务 */return uwRet; }// 创建任务具体实现 static void Test1_Task(void) {/* 任务都是一个无限循环不能返回 */while(1){HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);LOS_TaskDelay(500);HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);LOS_TaskDelay(500);} } /* USER CODE END 4 *//*** brief This function is executed in case of error occurrence.* retval None*/ void Error_Handler(void) {/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */ }#ifdef USE_FULL_ASSERT /*** brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* param file: pointer to the source file name* param line: assert_param error line source number* retval None*/ void assert_failed(uint8_t *file, uint32_t line) {/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf(Wrong parameters value: file %s on line %d\r\n, file, line) *//* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ 编译下载等LED0闪烁 恭喜你移植LiteOS成功 移植成功代码模板STM32F4移植LiteOS模板文件
http://www.huolong8.cn/news/267411/

相关文章:

  • 怎么给喜欢的人做网站泰州网站建设优化
  • 电商网站建设公司中国seo第一人
  • 中国建设劳动学会官方网站是多少公众号里的电影网站怎么做的
  • 邢台做wap网站价格网站添加新关键词
  • 导游网站如何建设的宿州城市建设投资网站
  • 天津市建设局网站网站建设基本流程前期
  • 芜湖营销型网站制作海南建设教育执业网站
  • 做测算的网站电子商务网站建设实践报告
  • 吉林平台网站建设推荐网页设计制作报告
  • html网站底部导航栏怎么做南城网站建设公司如何
  • 动态小网站应用之星 wordpress
  • 做网站建设优化的公司深圳品牌月饼排名
  • 凡科网站怎样做淘宝联盟怎么新建网站
  • 房产信息网站百度官网登录入口
  • 网站推广入口查看网站是否wordpress
  • 市场上网站开发价格英语网站如何做社群
  • 网站地图生成工具wordpress 付款
  • 查询网站所有死链接外贸公司出口退税申报流程
  • wordpress授权插件seo还有前景吗
  • 西昌手机网站建设成都彩钢顶防水做游戏直播那个网站
  • 怎么做招聘网站设计网站建设龙岗
  • 网站内容怎么写有利于排名wordpress+下载受限
  • 网站建设在实际工作中的意义在线查询营业执照
  • 网站设置反爬虫的常用方法有哪些横泉水库建设管理局网站
  • 利于seo优化的网站网站系统繁忙是什么原因
  • 做爰片的网站自助网站建设价格
  • 合肥论坛网站建设seo关键词排名优化销售
  • 网站模板和定制新冠疫苗接种最新消息
  • 网站做302重定向会怎么样怎么样分析一个网站
  • 在服务器上布网站怎么做宿迁做网站需要多少钱