update doc

This commit is contained in:
NeoZng 2022-11-13 21:46:52 +08:00
parent c4dfe8e60b
commit 9908dfd015
19 changed files with 117 additions and 18 deletions

View File

@ -156,7 +156,7 @@ void MX_TIM5_Init(void)
TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM5_Init 1 */
/* USER CODE END TIM5_Init 1 */
htim5.Instance = TIM5;
htim5.Init.Prescaler = 0;

View File

@ -33,7 +33,7 @@
- TODO
1. 增加SPI和I^2^C的BSP模组以便支持IST384磁力计和Oled显示屏等。
2. 增加segger RTT log的支持方便调试和日志记录
1. 增加和module层的deteck_task配合的蜂鸣器和led闪烁配置。
- 主要功能:实现映射功能。
- 在本框架中BSP层与cube高度耦合对该层的修改往往需要使用cube重新生成工程。该层也是唯一允许直接出现stm32HAL库函数的代码层**在非BSP层编写代码时如需使用HAL_...函数请思考是否有同功能的BSP_...函数**。
- 最简单的(如gpio)仅是对HAL库函数的封装。较为复杂的则会进行一定程度的处理(如can)
@ -49,11 +49,13 @@
- TODO
1. 添加pub-sub订阅-发布消息机制)的支持,以进一步隔离不同的模块完成封装。
2. 增加错误检测模块(官方例程中的`deteck_task`)。
3. 增加和PC通信协议的支持
4. 增加超级电容模块
5. 增加舵机模块
6. 增加单点激光模块
2. 增加模块离线/错误检测模块(官方例程中的`deteck_task`)。
3. 增加超级电容模块
4. 增加步进电机模块
5. 增加双板CAN通信模块
6. 增加裁判系统接收、多机通信、UI绘制模块
7. 增加舵机模块
8. 增加单点激光模块
- 主要功能:实现对设备的封装
@ -88,8 +90,9 @@ Module层主要存放的是类型定义和实例指针数组在该层没有
- TODO
1. 完成麦克纳姆轮/全向轮底盘的功能
2. 完成发射模块
3. 完成云台控制模块
2. 完成发射应用
3. 完成云台控制应用
4. 增加机器人整车控制应用
- 主要功能:实现机器人的控制
在完成BSP层和Module层后如果在APP层没有控制代码则代码并无实际功能。换言之BSP层与Module层的存在是为了APP层更简单、更合理、更易于扩展和移植。本框架的初始目标即是实现在APP层仅需思考逻辑并用无关硬件的C语言代码实现即可完成整个机器人的控制。所有需要使用的模块和算法都在Module层提供。
@ -116,7 +119,10 @@ ROOT:.
|
├─.vscode
│ launch.json # 用于VSCode插件CORTEX-DEBUG调试的配置文件
| task.json # 启动编译的任务配置文件
├─assets # markdown存放图片和外链文件夹
|
├─application # 应用层,包括底盘控制,云台控制和发射控制
│ chassis.c
│ chassis.h
@ -127,6 +133,8 @@ ROOT:.
│ shoot.c
│ shoot.h
│ shoot.md
| robot_cmd.c
| robot_cmd.h
├─bsp # 板级支持包,提供对硬件的封装,将接口暴露给module层
│ bsp.md
@ -223,6 +231,27 @@ ROOT:.
super_cap.h
```
## BSP和模块介绍
## BSP/Module/Application介绍
在对应模块和板级支持包文件夹下。
在对应应用、模块和板级支持包文件夹下。
## 整体架构
### 软件分层
![image-20221113211942850](assets\framework.png)
### 运行任务
![image-20221113212616636](assets\image-20221113212616636.png)
### 初始化流程
~~~mermaid
graph TD
HAL库初始化 --> BSP初始化 --> Application初始化 --> app调用其拥有模块的初始化 --> 启动操作系统
~~~
**注意,应用初始化不得放入其对应任务中,即使是在死循环前,否则可能导致一些需要定时器的任务初始化异常**。
APP会调用其所有的模块的初始化函数注册函数这是因为本框架的设计思想是任何模块在被注册构造/初始化)之前,都是不存在的,当且仅当定义了一个模块结构体(也称实例)的时候,才有一个实体的概念。

View File

@ -46,6 +46,8 @@ CubeMX进行初始化 --> VSCode编写代/进行编译/简单调试 --> Ozone变
***务必学完以上课程再开始本教程的学习。***
> 4. 如果有可能,还应该学习:[哈佛大学公开课计算机科学cs50](https://open.163.com/newview/movie/courseintro?newurl=%2Fspecial%2Fopencourse%2Fcs50.html)。你将会对单片机和计算机有不同的理解。
## 预备知识
1. 软件安装(队伍NAS和资料硬盘内提供了所有必要的依赖,安装包和插件)
@ -181,6 +183,8 @@ ITM是instrument trace macrocell指令追踪宏单元的缩写它用于提供
Makefile就是我们要使用的构建规则文件。
> **如果你使用basic_framework不需要重新生成代码。**
## VSCode编译和调试配置

View File

@ -0,0 +1,3 @@
# application
这是application层的说明

BIN
assets/framework.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1,10 @@
BSP
这是BSP层的说明文档。
> TODO:
> 1. 增加SPI和I2C支持
> 2. 增加外部中断支持
> 3. 增加软件中断支持
> 4. 增加硬件CRC支持
> 5. 增加USB和虚拟串口支持

View File

@ -4,6 +4,11 @@
extern TIM_HandleTypeDef htim4;
static uint8_t tmp_warning_level=0;
void buzzer_init()
{
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
}
void buzzer_on(uint16_t psc, uint16_t pwm,uint8_t level)
{
if(level>tmp_warning_level)

View File

@ -3,6 +3,7 @@
#include "struct_typedef.h"
void buzzer_init();
extern void buzzer_on(uint16_t psc, uint16_t pwm,uint8_t level);
extern void buzzer_off(void);

View File

@ -0,0 +1,16 @@
#include "bsp_init.h"
#include "bsp_log.h"
#include "bsp_dwt.h"
#include "bsp_buzzer.h"
#include "bsp_led.h"
#include "bsp_temperature.h"
// CAN和串口会在注册实例的时候自动初始化,不注册不初始化
void BSPInit()
{
DWT_Init(168);
BSP_Log_Init();
LED_init();
IMUTempInit();
buzzer_init();
}

View File

@ -0,0 +1,12 @@
#ifndef BSP_INIT_h
#define BSP_INIT_h
/**
* @brief bsp层初始化统一入口
*
*/
void BSPInit();
#endif // !BSP_INIT_h

View File

@ -2,12 +2,19 @@
#include "main.h"
extern TIM_HandleTypeDef htim5;
static tmp_output_level=0;
static tmp_output_level = 0;
void LED_init()
{
HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_3);
}
void aRGB_led_show(uint32_t aRGB)
{
static uint8_t alpha;
static uint16_t red,green,blue;
static uint16_t red, green, blue;
alpha = (aRGB & 0xFF000000) >> 24;
red = ((aRGB & 0x00FF0000) >> 16) * alpha;
@ -18,5 +25,3 @@ void aRGB_led_show(uint32_t aRGB)
__HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_2, green);
__HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_3, red);
}

View File

@ -3,6 +3,8 @@
#include "struct_typedef.h"
void LED_init();
extern void aRGB_led_show(uint32_t aRGB);
#endif

View File

@ -2,8 +2,12 @@
extern TIM_HandleTypeDef htim10;
void IMUTempInit()
{
HAL_TIM_PWM_Start(&htim10, TIM_CHANNEL_1);
}
void imu_pwm_set(uint16_t pwm)
{
__HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, pwm);
}

View File

@ -4,6 +4,7 @@
#include "stdint.h"
#include "tim.h"
void IMUTempInit();
extern void imu_pwm_set(uint16_t pwm);
#endif

View File

@ -69,7 +69,7 @@ typedef struct
float Output_LPF_RC; // RC = 1/omegac
float Derivative_LPF_RC;
uint8_t Improve;
PID_Improvement_e Improve;
//-----------------------------------
// for calculating
float Measure;

View File

@ -1,3 +1,7 @@
# ins_task
<p align='right'>neozng1@hnu.edu.cn</p>
<p align='right'>neozng1@hnu.edu.cn</p>
## 硬触发流程
![image-20221113212706633](assets\image-20221113212706633.png)

3
modules/module.md Normal file
View File

@ -0,0 +1,3 @@
# module
这是module层的说明。