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

做网站资金来源是什么中国交通建设集团英语网站

做网站资金来源是什么,中国交通建设集团英语网站,wordpress淘宝客主题带条件筛选,拍宣传片找什么公司STM32F103C8移植uC/OSIII并以不同周期点亮两个LED灯#xff08;HAL库方式#xff09;【uC/OS】【STM32开发板】【STM32CubeMX】 实验说明 将嵌入式操作系统uC/OSIII移植到STM32F103C8上#xff0c;构建两个任务#xff0c;两个任务分别以1s和3s周期对LED进行点亮—熄灭的…STM32F103C8移植uC/OSIII并以不同周期点亮两个LED灯HAL库方式【uC/OS】【STM32开发板】【STM32CubeMX】 实验说明 将嵌入式操作系统uC/OSIII移植到STM32F103C8上构建两个任务两个任务分别以1s和3s周期对LED进行点亮—熄灭的控制。 获取uC/OSIII源码 链接https://pan.baidu.com/s/1Axjz1ptMjIPcH6_0tjKKDw 提取码ucos 建立STM32CubeMX项目 选择STM32F103C8T6芯片设置PB0和PB1为GPIO_Output用于和LED相连。 如下图设置时钟为72MHz。 配置其它参数后生成Keil项目。 复制uC/OS-III文件到项目文件夹 在生成的项目文件夹下新建一个uCOSIII文件夹将下载的源文件下的uC-CPU、uC-LIB、uCOS-III复制到该文件夹如下图 在Core\Src文件夹下新建OS文件夹将下载的源码中uCOS-CONFIG中的文件app_cfg.h, cpu_cfg.h, includes.h, lib_cfg.h, os_app_hooks.c, os_app_hook.h, os_cfg.h, os_cfg_app.h复制到该OS文件夹中并新建bsp.c, bsp.h文件如下图 添加项目组件和头文件路径 添加项目分组 在生成的Keil项目中添加六个新组bsp, uCOSIII-CPU, uCOSIII-LIB, uCOSIII-Port, uCOSIII-Source, OS-cfg, 如下图 添加文件到分组 将Core\Src\OS路径下的bsp.c和bsp.h文件添加至bsp组中如下图 将uCOSIII\uC-CPU路径下的所有文件及uCOSIII\uC-CPU\ARM-Cortex-M4\RealView路径下的所有文件添加至uCOSIII-CPU组中如下图 将uCOSIII\uC-LIB路径下的所有文件及uCOSIII\uC-LIB\Ports\ARM-Cortex-M4\RealView路径下的所有文件添加至uCOSIII-LIB组中如下图 将uCOSIII\uCOS-III\Ports\ARM-Cortex-M4\Generic\RealView路径下的所有文件添加至uCOSIII-Port组中如下图 将uCOSIII\uCOS-III\Source路径下的所有文件添加至uCOSIII-Source组中如下图 将Core\Src\OS路径下除bsp.c, bsp.h外的所有文件添加至OS-cfg组如下图 添加头文件路径 点击Options for Target点击C/C在Include Path栏中添加以下路径 修改文件内容及编写程序 启动文件 (startup_stm32f103xb.s) 将启动文件中的PendSV_Handler和Systick_Handler改为OS_CPU_PendSVHandler和OS_CPU_SysTickHandler如下图 app_cfg.h #define APP_CFG_SERIAL_EN DEF_ENABLED改为#define APP_CFG_SERIAL_EN DEF_DISABLED#define APP_TRACE BSP_Ser_Printf改为#define APP_TRACE (void)。 includes.h 在#include bsp.h下添加#include gpio.h, #include app_cfg.h#include stm32f10x_lib.h改为#include stm32f1xx_hal.h。 bsp.c和bsp.h bsp.c // bsp.c #include includes.h#define DWT_CR *(CPU_REG32 *)0xE0001000 #define DWT_CYCCNT *(CPU_REG32 *)0xE0001004 #define DEM_CR *(CPU_REG32 *)0xE000EDFC #define DBGMCU_CR *(CPU_REG32 *)0xE0042004#define DEM_CR_TRCENA (1 24) #define DWT_CR_CYCCNTENA (1 0)CPU_INT32U BSP_CPU_ClkFreq (void) {return HAL_RCC_GetHCLKFreq(); }void BSP_Tick_Init(void) {CPU_INT32U cpu_clk_freq;CPU_INT32U cnts;cpu_clk_freq BSP_CPU_ClkFreq();#if(OS_VERSION3000u)cnts cpu_clk_freq/(CPU_INT32U)OSCfg_TickRate_Hz;#elsecnts cpu_clk_freq/(CPU_INT32U)OS_TICKS_PER_SEC;#endifOS_CPU_SysTickInit(cnts); }void BSP_Init(void) {BSP_Tick_Init();MX_GPIO_Init(); }#if (CPU_CFG_TS_TMR_EN DEF_ENABLED) void CPU_TS_TmrInit (void) {CPU_INT32U cpu_clk_freq_hz;DEM_CR | (CPU_INT32U)DEM_CR_TRCENA; /* Enable Cortex-M3s DWT CYCCNT reg. */DWT_CYCCNT (CPU_INT32U)0u;DWT_CR | (CPU_INT32U)DWT_CR_CYCCNTENA;cpu_clk_freq_hz BSP_CPU_ClkFreq();CPU_TS_TmrFreqSet(cpu_clk_freq_hz); } #endif#if (CPU_CFG_TS_TMR_EN DEF_ENABLED) CPU_TS_TMR CPU_TS_TmrRd (void) {return ((CPU_TS_TMR)DWT_CYCCNT); } #endif#if (CPU_CFG_TS_32_EN DEF_ENABLED) CPU_INT64U CPU_TS32_to_uSec (CPU_TS32 ts_cnts) {CPU_INT64U ts_us;CPU_INT64U fclk_freq;fclk_freq BSP_CPU_ClkFreq();ts_us ts_cnts / (fclk_freq / DEF_TIME_NBR_uS_PER_SEC);return (ts_us); } #endif#if (CPU_CFG_TS_64_EN DEF_ENABLED) CPU_INT64U CPU_TS64_to_uSec (CPU_TS64 ts_cnts) {CPU_INT64U ts_us;CPU_INT64U fclk_freq;fclk_freq BSP_CPU_ClkFreq();ts_us ts_cnts / (fclk_freq / DEF_TIME_NBR_uS_PER_SEC);return (ts_us); } #endifbsp.h // bsp.h #ifndef __BSP_H__ #define __BSP_H__#include stm32f1xx_hal.hvoid BSP_Init(void);#endiflib_cfg.h 该文件中有一个宏定义 #define LIB_MEM_CFG_HEAP_SIZE 27u * 1024uSTM32F103C8T6的RAM仅有20KB因此需要将堆空间改小这里改成10KB #define LIB_MEM_CFG_HEAP_SIZE 10u * 1024umain.c 我在main.c中创建了两个任务LED0_Task控制B0端口的LED灯以1s为周期亮—灭LED1_Task控制B1端口的LED灯以3s为周期亮—灭。 /* Includes ------------------------------------------------------------------*/ #include main.h #include gpio.h/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include includes.h /* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* 任务优先级 */ #define LED0_TASK_PRIO 1 #define LED1_TASK_PRIO 2 //#define SEND_MSG_TASK_PRIO 3/* 任务堆栈大小 */ #define LED0_STK_SIZE 128 #define LED1_STK_SIZE 128 //#define SEND_MSG_STK_SIZE 128/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */ //任务控制块 static OS_TCB LED0TaskTCB; static OS_TCB LED1TaskTCB;//任务堆栈 static CPU_STK LED0_TASK_STK[LED0_STK_SIZE]; static CPU_STK LED1_TASK_STK[LED1_STK_SIZE];/* 私有函数原形 --------------------------------------------------------------*/ static void AppTaskCreate(void); static void AppObjCreate(void); static void LED0_Task(void *p_arg); static void LED1_Task(void *p_arg); /* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /*** brief System Clock Configuration* retval None*/ void SystemClock_Config(void) {RCC_OscInitTypeDef RCC_OscInitStruct {0};RCC_ClkInitTypeDef RCC_ClkInitStruct {0};/**Initializes the CPU, AHB and APB busses clocks */RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL RCC_PLL_MUL9;if (HAL_RCC_OscConfig(RCC_OscInitStruct) ! HAL_OK){Error_Handler();}/**Initializes the CPU, AHB and APB busses 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_DIV2;RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_2) ! HAL_OK){Error_Handler();} }/* USER CODE END 0 *//*** brief The application entry point.* retval int*/ int main(void) {/* USER CODE BEGIN 1 */OS_ERR err;/* 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 */OSInit(err); /* USER CODE END SysInit *//* Initialize all configured peripherals */ // MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE *//* 创建LED0任务 */OSTaskCreate((OS_TCB *)LED0TaskTCB, /* Create the start task */(CPU_CHAR *)LED0_Task,(OS_TASK_PTR ) LED0_Task,(void *) 0,(OS_PRIO ) LED0_TASK_PRIO,(CPU_STK *)LED0_TASK_STK[0],(CPU_STK_SIZE) LED0_STK_SIZE / 10,(CPU_STK_SIZE) LED0_STK_SIZE,(OS_MSG_QTY ) 0,(OS_TICK ) 0,(void *) 0,(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),(OS_ERR *)err);/* 创建LED1任务 */OSTaskCreate((OS_TCB *)LED1TaskTCB, /* Create the start task */(CPU_CHAR *)LED1_Task,(OS_TASK_PTR ) LED1_Task,(void *) 0,(OS_PRIO ) LED1_TASK_PRIO,(CPU_STK *)LED1_TASK_STK[0],(CPU_STK_SIZE) LED1_STK_SIZE / 10,(CPU_STK_SIZE) LED1_STK_SIZE,(OS_MSG_QTY ) 0,(OS_TICK ) 0,(void *) 0,(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),(OS_ERR *)err);/* 启动多任务系统控制权交给uC/OS-III */OSStart(err); /* Start multitasking (i.e. give control to uC/OS-III). */}/*** 函数功能: 启动任务函数体。* 输入参数: p_arg 是在创建该任务时传递的形参* 返 回 值: 无* 说 明无*/ static void LED0_Task (void *p_arg) {OS_ERR err;(void)p_arg;BSP_Init(); /* Initialize BSP functions */CPU_Init();Mem_Init(); /* Initialize Memory Management Module */#if OS_CFG_STAT_TASK_EN 0uOSStatTaskCPUUsageInit(err); /* Compute CPU capacity with no task running */ #endifCPU_IntDisMeasMaxCurReset();AppTaskCreate(); /* Create Application Tasks */AppObjCreate(); /* Create Application Objects */while (DEF_TRUE){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);OSTimeDlyHMSM(0, 0, 0, 500, OS_OPT_TIME_HMSM_STRICT, err);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);OSTimeDlyHMSM(0, 0, 0, 500, OS_OPT_TIME_HMSM_STRICT, err);}/* USER CODE END 3 */ }static void LED1_Task (void *p_arg) {OS_ERR err;(void)p_arg;BSP_Init(); /* Initialize BSP functions */CPU_Init();Mem_Init(); /* Initialize Memory Management Module */#if OS_CFG_STAT_TASK_EN 0uOSStatTaskCPUUsageInit(err); /* Compute CPU capacity with no task running */ #endifCPU_IntDisMeasMaxCurReset();AppTaskCreate(); /* Create Application Tasks */AppObjCreate(); /* Create Application Objects */while (DEF_TRUE){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);OSTimeDlyHMSM(0, 0, 1, 500, OS_OPT_TIME_HMSM_STRICT, err);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);OSTimeDlyHMSM(0, 0, 1, 500, OS_OPT_TIME_HMSM_STRICT, err);}/* USER CODE END 3 */ }/* USER CODE BEGIN 4 */ /*** 函数功能: 创建应用任务* 输入参数: p_arg 是在创建该任务时传递的形参* 返 回 值: 无* 说 明无*/ static void AppTaskCreate (void) {}/*** 函数功能: uCOSIII内核对象创建* 输入参数: 无* 返 回 值: 无* 说 明无*/ static void AppObjCreate (void) {} /* 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 *//* 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,tex: printf(Wrong parameters value: file %s on line %d\r\n, file, line) *//* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ OSTimeDlyHMSM函数是延时函数括号中的四个数字表示延迟时长从左至右分别为时、分、秒、毫秒。 实验结果 绿色接B0红色接B1 参考文章 STM32F103基于HAL库移植uC/OS-III_ucos iii hal移植到正点原子-CSDN博客 STM32F103C8移植uCOSIIIHAL库_stm32f103移植ucosiii-CSDN博客
http://www.hkea.cn/news/14330094/

相关文章:

  • 网站开发的ui设计网站软文推广网站
  • 河北省企业网站建设公司客户关系管理系统案例
  • 免费公司网站建设网站建设打广告
  • 网页设计资料的网站宜春做网站的公司
  • 法国网站域名江苏网站建设联系方式
  • 建设银行信用卡账网站放单网站建设
  • 山东省建设注册执业中心网站网站自己建设
  • 什么是速成网站access2003做网站
  • 广州网站建设网站托管运营宁德市蕉城区
  • 长春自助建站软件php初学者网站
  • 做自媒体要知道的网站百度没有排名的点击软件
  • 宁波品牌网站设计价格自定义域名
  • 建设工业网站首页wordpress公司展示网站
  • 汝南专业网站建设外贸销售平台有哪些
  • 汕头市门户网站建设wordpress寻模板
  • 小学门户网站建设情况汇报做算法题网站
  • 软件开网站建设骗术wordpress插件丢失
  • 企业网站域名注册查询网站建设开发报价方案模板
  • 湘潭做网站 联系磐石网络wordpress后台样式
  • 没有域名的网站做装修行业营销型网站
  • 财税营销型网站泉州企业网站维护制作
  • 北京专业网站设计推荐wordpress excerpt
  • 建设一个聊天类的网站西安建设工程交易信息网
  • 怎么在百度做网站推广页面设计美工
  • 溧阳有没有做网站的公司孝感市网站建设公司
  • wap网站还用吗做网站大约多少钱
  • 建设新网站征求意见保定市清苑区网站建设
  • 摄影师网站模板陕西建设执业中心网站办事大厅
  • 全能网站建设完全自学手册昆明网站设计都需要设计什么
  • 网站页脚怎么做能好看点免费app制作工具