m0_75249094 2023-05-27 21:18 采纳率: 100%
浏览 69
已结题

嵌入式系统综合设计题有会的教一下嘛?

基于 Cortex -M3内核处理器和实时操作系统设计完成一个工程项目。完成的工程要求如下
①在 uC / OS - II 下运行;②要求用到 EXTI 模块和定时器中断;
③要求用到 AD 模块或 USART 或 DMA 技术(三选一);
阐述需包括
1)系统的基本描述:系统基本组成、实现的功能或作用,以及设计的创新或创意2)硬件设计模块图和外部接线图;
3)软件主要框架图和程序流程图;
4)所使用芯片外设模块的初始化程序代码,主要运行程序代码或关键函数代码,以及必要的程序说明和代码注解

  • 写回答

4条回答 默认 最新

  • 鱼弦 全栈领域优质创作者 2023-05-29 11:07
    关注
    以下是一个基于Cortex-M3内核处理器和uC/OS-II实时操作系统的工程项目设计方案。
    
    系统的基本描述:
    该系统基于Cortex-M3内核处理器和uC/OS-II实时操作系统开发,主要实现以下功能:
    
    通过外部中断(EXTI)和定时器中断,实现对系统的输入和定时任务的处理;
    通过AD模块获取模拟信号,并进行数字化处理;
    通过USART或DMA技术,实现与其他设备或系统之间的通信。
    创新点:
    该系统使用了uC/OS-II实时操作系统,能够有效地管理各个任务的执行顺序和优先级,提高系统的稳定性和可靠性。
    
    硬件设计模块图和外部接线图:
    该系统的硬件设计包括以下模块:
    
    Cortex-M3内核处理器;
    外部中断模块(EXTI);
    定时器模块;
    AD模块或USART或DMA模块;
    外设设备(如显示器、传感器等)。
    系统的外部接线图如下所示:
    
    gherkin
    Copy
    +------------------+          +------------------+
    |                  |          |                  |
    |  Cortex-M3处理器  |          |  外设设备         |
    |                  |          |                  |
    |                  |          |                  |
    |                  |          |                  |
    |                  |          |                  |
    |                  |          |                  |
    |         EXTI引脚 |--------->|                  |
    |                  |          |                  |
    |         定时器   |<---------|                  |
    |                  |          |                  |
    |         AD模块   |<-------->|                  |
    |                  |          |                  |
    |        USART/DMA |<-------->|                  |
    |                  |          |                  |
    +------------------+          +------------------+
    软件主要框架图和程序流程图:
    该系统的软件主要分为以下几个模块:
    
    系统初始化模块;
    外部中断处理模块;
    定时器中断处理模块;
    AD模块或USART或DMA模块的数据处理模块;
    任务调度模块。
    系统的主要程序流程图如下所示:
    
    gherkin
    Copy
    +------------------------+
    |                        |
    |  系统初始化模块          |
    |                        |
    |                        |
    |                       |                        |
    +-----------+------------+
                |
                |
                |
    +-----------v------------+
    |                        |
    |  任务调度模块             |
    |                        |
    |                        |
    |                        |
    |                        |
    +-----------+------------+
                |
                |
    +-----------v------------+
    |                        |
    |  外部中断处理模块         |
    |                        |
    |                        |
    |                        |
    |                        |
    +-----------+------------+
                |
                |
    +-----------v------------+
    |                        |
    |  定时器中断处理模块        |
    |                        |
    |                        |
    |                        |
    |                        |
    +-----------+------------+
                |
                |
    +-----------v------------+
    |                        |
    |  数据处理模块            |
    |                        |
    |                        |
    |                        |
    |                        |
    +------------------------+
    所使用芯片外设模块的初始化程序代码,主要运行程序代码或关键函数代码,以及必要的程序说明和代码注解:
    以下是一个使用STM32F103C8T6芯片的外设模块初始化程序代码的示例:
    
    
    
    
    #include "stm32f10x.h"
    
    void EXTI_Configuration(void)
    {
      EXTI_InitTypeDef EXTI_InitStructure;
    
      // 使能GPIOB时钟
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    
    // 配置PB0为输入模式,上拉输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    // 配置EXTI_Line0对应的中断请求线
    EXTI_ClearITPendingBit(EXTI_Line0);
    EXTI_InitStructure.EXTI_Line = EXTI_Line0;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    
    // 配置中断优先级
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    }
    
    // 外部中断0的中断处理函数
    void EXTI0_IRQHandler(void)
    {
    // 处理中断事件
    
    // 清除中断标志位
    EXTI_ClearITPendingBit(EXTI_Line0);
    }
    
    ini
    Copy
    
    注释说明:
    - 在函数开头,使能了GPIOB的时钟,以便能够使用GPIOB引脚。
    - 然后,配置PB0为输入模式,并开启上拉输入模式,以便能够检测外部中断信号。
    - 接着,配置EXTI_Line0对应的中断请求线,设置中断触发方式为上升沿触发,并开启中断请求线。
    - 最后,设置外部中断0的中断优先级为抢占优先级为1,响应优先级为1,并开启中断请求线。
    
    在外部中断0的中断处理函数中,可以编写处理中断事件的代码,并在最后清除中断标志位,以便下一次中断能够被正确触发。
    
    2. 定时器模块初始化代码:
    
    ```c
    void TIM_Configuration(void)
    {
      TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
      NVIC_InitTypeDef NVIC_InitStructure;
    
      // 使能TIM2时钟
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    
      // 配置计数器的时钟源和分频系数
      TIM_TimeBaseInitStruct.TIM_Prescaler = 71; // 时钟频率为72MHz,计继续:
    
      TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
      TIM_TimeBaseInitStruct.TIM_Period = 999; // 计数器计数到999后溢出,即1ms中断一次
      TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
      TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
      TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
    
      // 配置TIM2中断
      TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
      TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    
      // 配置中断优先级
      NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    }
    
    // TIM2的中断处理函数
    void TIM2_IRQHandler(void)
    {
      // 处理中断事件
    
      // 清除中断标志位
      TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    }
    注释说明:
    
    在函数开头,使能了TIM2的时钟,以便能够使用定时器模块。
    然后,配置计数器的时钟源和分频系数,使得计数器时钟为1MHz,计数器溢出时间为1ms。
    接着,配置TIM2中断,使能定时器中断,并清除中断标志位。
    最后,设置TIM2的中断优先级为抢占优先级为2,响应优先级为1,并开启中断请求线。
    在TIM2的中断处理函数中,可以编写处理中断事件的代码,并在最后清除中断标志位,以便下一次中断能够被正确触发。
    
    数据处理模块的代码示例:
    c
    Copy
    void Data_Processing(void)
    {
      // 获取AD转换结果或USART/DMA传输的数据
    
      // 对数据进行处理
    
      // 将处理后的数据发送到外设设备
    }
    注释说明:
    
    数据处理模块可以根据实际需求,选择使用AD模块或USART/DMA模块获取数据。
    在获取数据之后,可以对数据进行处理,例如滤波、校正、计算等操作。
    处理后的数据可以通过USART或DMA技术发送到外设设备,例如LCD屏幕、LED灯、电机驱动器等。发送数据时,需要根据外设设备的通信协议进行数据组包和发送,以确保数据能够被正确解析和显示。
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月6日
  • 已采纳回答 5月29日
  • 创建了问题 5月27日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置