uc/os3多任务与实时日历

uc/os3多任务与实时日历

嵌入式第12周作业


1. (简答题)
1. 学习嵌入式实时操作系统(RTOS),以uc/OS为例,将其移植到stm32F103上,构建至少3个任务(task):其中两个task分别以1s和3s周期对LED等进行点亮-熄灭的控制;另外一个task以2s周期通过串口发送“hello uc/OS! 欢迎来到RTOS多任务环境!”。记录详细的移植过程。
参考:
1) STM32F103C8T6移植uC/OS-III基于HAL库超完整详细过程
2) STM32F103C8移植uCOSIII(HAL库)
3) STM32F103C8T6移植uCOS基于HAL库

2. 了解实时时钟RTC的原理。STM32芯片自带RTC,因此不须像其他MCU需外接RTC模块。请编程实现STM32的日历读取、设置和输出。要求:
1)读取RTC初始时间,验证是否为 1970年1月1日零分零秒;
2)将RTC时间调整为当前时间,并以 2021年x月x日x分x秒的格式从串口输出(或输出到OLED屏),每1s改变一次;
3)如果输出内容中需加入“星期x”,请修改代码。
参考:
[STM32系列]HAL库STM32CubeMX教程十三—RTC时钟
【STM32】HAL库 STM32CubeMX教程十三—RTC时钟

3. 在上述实验中,在掌握Keil的仿真调试代码功能之外,也学习使用仪器对代码运行进行故障排查和功能调测。
1) 练习使用示波器去观察LED输出电平和串口通信的波形,分析故障;
2) 分别使用Keil虚拟仿真逻辑仪和 真实逻辑仪(SaleaeLogic16)抓取LED输出电平和串口通信的波形,进行协议分析。



一、将uc/OS移植到stm32F103上

1.建立HAL库

  1. 建立工程
    请添加图片描述

  2. 选择芯片请添加图片描述

  3. 配置RCC
    请添加图片描述

  4. 配置SYS
    请添加图片描述

  5. 配置系统时钟为72M
    请添加图片描述

  6. 将与LED相连的端口PC13配置为GPIO_Output
    请添加图片描述

  7. 设置串口USART1
    请添加图片描述

  8. Project
    请添加图片描述

  9. 勾选
    请添加图片描述

  10. Open Project

  11. 在main函数下的while中添加

        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
		HAL_Delay(500);
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
		HAL_Delay(500);
  1. 编译并烧录看到灯闪烁。

2.移植

1.准备

  1. ucosIII源码
    官网http://micrium.com/downloadcenter/
    请添加图片描述

  2. 新建uC-BSP和uC-CONFIG文件夹

  3. 为uC-BSP文件夹新建bsp.c和bsp.h文件
    在这里插入图片描述

  4. 将uCOS相关文件复制到HAL工程的MDK-ARM文件夹下
    在这里插入图片描述
    在这里插入图片描述

  5. 将uCOS文件添加到项目
    在这里插入图片描述

2.移植

  1. 导入文件路径
    在这里插入图片描述

在这里插入图片描述

  1. CPU-Add 选择uC-CPU下的在这里插入图片描述
    RealView下的
    在这里插入图片描述

  2. LIB-Add uC-LIB下的
    在这里插入图片描述
    RealView下的
    在这里插入图片描述

  3. PORT-Add RealView下的
    在这里插入图片描述

  4. SOURCE-Add Source下的
    在这里插入图片描述

  5. CONFIG-Add uc-CONFIG下的
    在这里插入图片描述

  6. BSP-Add uc-BSP下的在这里插入图片描述

  7. 在path中添加
    在这里插入图片描述

  8. 将启动文件的PendSV_Handler和Systick_Handler改为OS_CPU_PendSVHandlerOS_CPU_SysTickHandler
    在这里插入图片描述
    在这里插入图片描述

  9. 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)
    在这里插入图片描述

    在这里插入图片描述

  10. includes.h
    在#include <bsp.h> 后面加上
    #include “gpio.h”
    #include “app_cfg.h”
    将#include <stm32f10x_lib.h> 改为
    #include “stm32f1xx_hal.h”
    在这里插入图片描述

  11. lib_cfg.h
    #define LIB_MEM_CFG_HEAP_SIZE 5u * 1024u改为
    #define LIB_MEM_CFG_HEAP_SIZE 5u * 1024u
    在这里插入图片描述

  12. 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_VERSION>=3000u)
		cnts = cpu_clk_freq/(CPU_INT32U)OSCfg_TickRate_Hz;
	#else
		cnts = cpu_clk_freq/(CPU_INT32U)OS_TICKS_PER_SEC;
	#endif
	OS_CPU_SysTickInit(cnts);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值