diff --git a/HAL_N_Middlewares/Src/tim.c b/HAL_N_Middlewares/Src/tim.c index c665bb8..79d130d 100644 --- a/HAL_N_Middlewares/Src/tim.c +++ b/HAL_N_Middlewares/Src/tim.c @@ -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; diff --git a/README.md b/README.md index 075c10a..b915b55 100644 --- a/README.md +++ b/README.md @@ -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介绍 -在对应模块和板级支持包文件夹下。 \ No newline at end of file +在对应应用、模块和板级支持包文件夹下。 + +## 整体架构 + +### 软件分层 + +![image-20221113211942850](assets\framework.png) + +### 运行任务 + +![image-20221113212616636](assets\image-20221113212616636.png) + +### 初始化流程 + +~~~mermaid +graph TD +HAL库初始化 --> BSP初始化 --> Application初始化 --> app调用其拥有模块的初始化 --> 启动操作系统 +~~~ + +**注意,应用初始化不得放入其对应任务中,即使是在死循环前,否则可能导致一些需要定时器的任务初始化异常**。 + +APP会调用其所有的模块的初始化函数(注册函数),这是因为本框架的设计思想是任何模块在被注册(构造/初始化)之前,都是不存在的,当且仅当定义了一个模块结构体(也称实例)的时候,才有一个实体的概念。 diff --git a/VSCode+Ozone使用方法.md b/VSCode+Ozone使用方法.md index a890e47..3ca0375 100644 --- a/VSCode+Ozone使用方法.md +++ b/VSCode+Ozone使用方法.md @@ -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编译和调试配置 diff --git a/application/application.md b/application/application.md new file mode 100644 index 0000000..d314406 --- /dev/null +++ b/application/application.md @@ -0,0 +1,3 @@ +# application + +这是application层的说明 \ No newline at end of file diff --git a/assets/framework.png b/assets/framework.png new file mode 100644 index 0000000..17aba95 Binary files /dev/null and b/assets/framework.png differ diff --git a/assets/image-20221113212616636.png b/assets/image-20221113212616636.png new file mode 100644 index 0000000..ad80a74 Binary files /dev/null and b/assets/image-20221113212616636.png differ diff --git a/assets/image-20221113212706633.png b/assets/image-20221113212706633.png new file mode 100644 index 0000000..58a6cdb Binary files /dev/null and b/assets/image-20221113212706633.png differ diff --git a/bsp/bsp.md b/bsp/bsp.md index e69de29..5ba7067 100644 --- a/bsp/bsp.md +++ b/bsp/bsp.md @@ -0,0 +1,10 @@ +BSP + +这是BSP层的说明文档。 + +> TODO: +> 1. 增加SPI和I2C支持 +> 2. 增加外部中断支持 +> 3. 增加软件中断支持 +> 4. 增加硬件CRC支持 +> 5. 增加USB和虚拟串口支持 \ No newline at end of file diff --git a/bsp/bsp_buzzer.c b/bsp/bsp_buzzer.c index 340ea36..b54bb83 100644 --- a/bsp/bsp_buzzer.c +++ b/bsp/bsp_buzzer.c @@ -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) diff --git a/bsp/bsp_buzzer.h b/bsp/bsp_buzzer.h index 932d53a..c238343 100644 --- a/bsp/bsp_buzzer.h +++ b/bsp/bsp_buzzer.h @@ -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); diff --git a/bsp/bsp_init.c b/bsp/bsp_init.c index e69de29..ecbedeb 100644 --- a/bsp/bsp_init.c +++ b/bsp/bsp_init.c @@ -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(); +} \ No newline at end of file diff --git a/bsp/bsp_init.h b/bsp/bsp_init.h index e69de29..82311ce 100644 --- a/bsp/bsp_init.h +++ b/bsp/bsp_init.h @@ -0,0 +1,12 @@ +#ifndef BSP_INIT_h +#define BSP_INIT_h + + +/** + * @brief bsp层初始化统一入口 + * + */ +void BSPInit(); + +#endif // !BSP_INIT_h + diff --git a/bsp/bsp_led.c b/bsp/bsp_led.c index a56e974..6fa11cb 100644 --- a/bsp/bsp_led.c +++ b/bsp/bsp_led.c @@ -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); } - - diff --git a/bsp/bsp_led.h b/bsp/bsp_led.h index 73c8a05..2e96943 100644 --- a/bsp/bsp_led.h +++ b/bsp/bsp_led.h @@ -3,6 +3,8 @@ #include "struct_typedef.h" + +void LED_init(); extern void aRGB_led_show(uint32_t aRGB); #endif \ No newline at end of file diff --git a/bsp/bsp_temperature.c b/bsp/bsp_temperature.c index 8430726..9d07952 100644 --- a/bsp/bsp_temperature.c +++ b/bsp/bsp_temperature.c @@ -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); } - diff --git a/bsp/bsp_temperature.h b/bsp/bsp_temperature.h index 8993bee..c22ca79 100644 --- a/bsp/bsp_temperature.h +++ b/bsp/bsp_temperature.h @@ -4,6 +4,7 @@ #include "stdint.h" #include "tim.h" +void IMUTempInit(); extern void imu_pwm_set(uint16_t pwm); #endif diff --git a/modules/algorithm/controller.h b/modules/algorithm/controller.h index 578a735..dcdab69 100644 --- a/modules/algorithm/controller.h +++ b/modules/algorithm/controller.h @@ -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; diff --git a/modules/imu/ins_task.md b/modules/imu/ins_task.md index 54c0c31..b68bc99 100644 --- a/modules/imu/ins_task.md +++ b/modules/imu/ins_task.md @@ -1,3 +1,7 @@ # ins_task -

neozng1@hnu.edu.cn

\ No newline at end of file +

neozng1@hnu.edu.cn

+ +## 硬触发流程 + +![image-20221113212706633](assets\image-20221113212706633.png) \ No newline at end of file diff --git a/modules/module.md b/modules/module.md new file mode 100644 index 0000000..a761182 --- /dev/null +++ b/modules/module.md @@ -0,0 +1,3 @@ +# module + +这是module层的说明。 \ No newline at end of file