This commit is contained in:
Glz
2023-12-17 16:23:13 +08:00
12 changed files with 581 additions and 549 deletions

View File

@@ -1,24 +1,24 @@
# fireware_violet # fireware_violet
## 使用 VSCode + EIDE + GCC + OpenOCD 开发 ## 1 使用 VSCode + EIDE + GCC + OpenOCD 开发
* 确保 VSCode 安装了 `EIDE` 插件 ### 1.1 前提要求
* 将文件 `firmware_violet.code-workspace_eg` 重命名为 `firmware_violet.code-workspace` 1. VSCode 安装了 `EIDE` 插件
2. 有 Python3 环境
3. 已有沁恒 risc-v 工具链 (MRS 集成开发环境自带)
* 双击 `firmware_violet.code-workspace` 从工作区开启 VSCode ### 1.2 在工作区目录下运行配置脚本
* 工作区设置中修改 EIDE 插件设置,将 `EIDE.RISCV.InstallDirectory``EIDE.OpenOCD.ExePath` 两项设置更改为自己 MRS 下 ToolChains 中 GCC 和 OpenOCD 的路径 ```bash
pyhton ./set_eide_env.py
```
### eg. 根据提示配置两个路径 (OpenOCD 和 riscv-gcc) 即可
`EIDE.RISCV.InstallDirectory` - `D:\Program_Files_nospace\MounRiver\MounRiver_Studio\toolchain\RISC-V Embedded GCC` 配置完成后请先关闭 VSCode再重新双击 `violet_firmware_zf.code-workspace` 文件开启工作区 (否则当前工作区的 OpenOCD 路径配置不会马上生效)
`EIDE.OpenOCD.ExePath` - `D:\Program_Files_nospace\MounRiver\MounRiver_Studio\toolchain\OpenOCD\bin\openocd.exe` ## 2 常用快捷键
然后就可以愉快的使用 VSCode 进行开发和下载了
## 常用快捷键:
* 编译:`F7` * 编译:`F7`

26
app/by_fan_control.c Normal file
View File

@@ -0,0 +1,26 @@
#include "by_fan_control.h"
#include "zf_common_headfile.h"
void by_pwm_init(void)
{
pwm_init(TIM4_PWM_MAP1_CH1_D12, 10000, 0); // 浮力风扇左
pwm_init(TIM4_PWM_MAP1_CH2_D13, 10000, 0); // 浮力风扇右
pwm_init(TIM4_PWM_MAP1_CH3_D14, 10000, 0); // 动力风扇左
pwm_init(TIM4_PWM_MAP1_CH4_D15, 10000, 0); // 动力风扇右
}
void by_pwm_update_duty(uint32_t update_pwm_duty)
{
if (7000UL > update_pwm_duty) {
update_pwm_duty = 7000UL;
}
pwm_set_duty(TIM4_PWM_MAP1_CH1_D12, update_pwm_duty);
pwm_set_duty(TIM4_PWM_MAP1_CH2_D13, update_pwm_duty);
}
void by_pwm_power_duty(uint32_t power_pwm_duty_l, uint32_t power_pwm_duty_r)
{
pwm_set_duty(TIM4_PWM_MAP1_CH3_D14, power_pwm_duty_l);
pwm_set_duty(TIM4_PWM_MAP1_CH4_D15, power_pwm_duty_r);
}

11
app/by_fan_control.h Normal file
View File

@@ -0,0 +1,11 @@
#ifndef _BY_FAN_CONTROL_H_
#define _BY_FAN_CONTROL_H_
#include "stdio.h"
#include "ch32v30x.h"
extern void by_pwm_init(void);
extern void by_pwm_update_duty(uint32_t update_pwm_duty);
extern void by_pwm_power_duty(uint32_t power_pwm_duty_l, uint32_t power_pwm_duty_r);
#endif

27
app/by_pt_button.c Normal file
View File

@@ -0,0 +1,27 @@
#include "by_pt_button.h"
#include "zf_common_headfile.h"
uint8_t potate_button;
void by_gpio_init(void)
{
gpio_init(E10, GPI, GPIO_HIGH, GPI_PULL_UP);
}
void by_exit_init(void)
{
exti_init(E9, EXTI_TRIGGER_FALLING);
exti_init(E11, EXTI_TRIGGER_FALLING);
}
uint8_t by_get_pb_statu(void)
{
uint8_t temp_s = potate_button;
potate_button = 0;
return temp_s;
}
void by_ips_show(void)
{
ips114_show_string(0, 0, "button statu:");
ips114_show_uint(104, 0, by_get_pb_statu(), 1);
}

15
app/by_pt_button.h Normal file
View File

@@ -0,0 +1,15 @@
#ifndef _BY_PT_BUTTON_H__
#define _BY_PT_BUTTON_H__
#include "stdio.h"
#include "ch32v30x.h"
#define POTATE_BUTTOM_PRESS 1
#define POTATE_BUTTOM_FOREWARD 2
#define POTATE_BUTTOM_BACKWARD 3
extern uint8_t potate_button;
extern void by_exit_init(void);
extern void by_gpio_init(void);
extern uint8_t by_get_pb_statu(void);
extern void by_ips_show(void);
#endif

17
app/cw_servo.c Normal file
View File

@@ -0,0 +1,17 @@
#include "zf_common_headfile.h"
#include "cw_servo.h"
void cw_servo_init(void)
{
pwm_init(SERVO_L_PWM_CHANNEL, 50, 1000);
pwm_init(SERVO_R_PWM_CHANNEL, 50, 1000);
}
void cw_servo_set_angle(float servo_l_angle, float servo_r_angle)
{
uint32_t servo_l_duty_s = (uint32_t)(servo_l_angle * SERVO_L_DUTY_PER_ANGLE);
uint32_t servo_r_duty_s = (uint32_t)(servo_r_angle * SERVO_R_DUTY_PER_ANGLE);
pwm_set_duty(SERVO_L_PWM_CHANNEL, servo_l_duty_s);
pwm_set_duty(SERVO_R_PWM_CHANNEL, servo_r_duty_s);
}

20
app/cw_servo.h Normal file
View File

@@ -0,0 +1,20 @@
#ifndef _CW_SERVO_H__
#define _CW_SERVO_H__
#include "zf_common_headfile.h"
#define SERVO_L_PWM_CHANNEL TIM2_PWM_MAP0_CH1_A0
#define SERVO_R_PWM_CHANNEL TIM2_PWM_MAP0_CH2_A1
#define SERVO_MAX_ANGLE_RANGE (90.0F)
#define SERVO_L_DUTY_MAX (1100.0F)
#define SERVO_L_DUTY_MIN (900.0F)
#define SERVO_R_DUTY_MAX (1100.0F)
#define SERVO_R_DUTY_MIN (900.0F)
#define SERVO_L_DUTY_PER_ANGLE ((SERVO_L_DUTY_MAX - SERVO_L_DUTY_MIN) / SERVO_MAX_ANGLE_RANGE)
#define SERVO_R_DUTY_PER_ANGLE ((SERVO_R_DUTY_MAX - SERVO_R_DUTY_MIN) / SERVO_MAX_ANGLE_RANGE)
extern void cw_servo_init(void);
extern void cw_servo_set_angle(float servo_l_angle, float servo_r_angle);
#endif

334
app/isr.c
View File

@@ -1,73 +1,75 @@
/********************************************************************************************************************* /*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4> * CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF> * Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
* *
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> * <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
* *
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD> * <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
* *
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤ * <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤ * <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL * <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
* *
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD> * <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/> * <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
* *
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾 * <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD> * <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* *
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> isr * <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> isr
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ * <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5> * <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6 * <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/ * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
* *
* <20>޸ļ<DEB8>¼ * <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע * <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version * 2022-09-15 <20><>W first version
********************************************************************************************************************/ ********************************************************************************************************************/
#include "zf_common_headfile.h" #include "zf_common_headfile.h"
void NMI_Handler(void) __attribute__((interrupt())); #include "by_pt_button.h"
void NMI_Handler(void) __attribute__((interrupt()));
void HardFault_Handler(void) __attribute__((interrupt())); void HardFault_Handler(void) __attribute__((interrupt()));
void USART1_IRQHandler(void) __attribute__((interrupt())); void USART1_IRQHandler(void) __attribute__((interrupt()));
void USART2_IRQHandler(void) __attribute__((interrupt())); void USART2_IRQHandler(void) __attribute__((interrupt()));
void USART3_IRQHandler(void) __attribute__((interrupt())); void USART3_IRQHandler(void) __attribute__((interrupt()));
void UART4_IRQHandler (void) __attribute__((interrupt())); void UART4_IRQHandler(void) __attribute__((interrupt()));
void UART5_IRQHandler (void) __attribute__((interrupt())); void UART5_IRQHandler(void) __attribute__((interrupt()));
void UART6_IRQHandler (void) __attribute__((interrupt())); void UART6_IRQHandler(void) __attribute__((interrupt()));
void UART7_IRQHandler (void) __attribute__((interrupt())); void UART7_IRQHandler(void) __attribute__((interrupt()));
void UART8_IRQHandler (void) __attribute__((interrupt())); void UART8_IRQHandler(void) __attribute__((interrupt()));
void DVP_IRQHandler (void) __attribute__((interrupt())); void DVP_IRQHandler(void) __attribute__((interrupt()));
//void TIM1_BRK_IRQHandler (void) __attribute__((interrupt())); // void TIM1_BRK_IRQHandler (void) __attribute__((interrupt()));
void TIM1_UP_IRQHandler (void) __attribute__((interrupt())); void TIM1_UP_IRQHandler(void) __attribute__((interrupt()));
//void TIM1_TRG_COM_IRQHandler (void) __attribute__((interrupt())); // void TIM1_TRG_COM_IRQHandler (void) __attribute__((interrupt()));
//void TIM1_CC_IRQHandler (void) __attribute__((interrupt())); // void TIM1_CC_IRQHandler (void) __attribute__((interrupt()));
void TIM2_IRQHandler (void) __attribute__((interrupt())); void TIM2_IRQHandler(void) __attribute__((interrupt()));
void TIM3_IRQHandler (void) __attribute__((interrupt())); void TIM3_IRQHandler(void) __attribute__((interrupt()));
void TIM4_IRQHandler (void) __attribute__((interrupt())); void TIM4_IRQHandler(void) __attribute__((interrupt()));
void TIM5_IRQHandler (void) __attribute__((interrupt())); void TIM5_IRQHandler(void) __attribute__((interrupt()));
void TIM6_IRQHandler (void) __attribute__((interrupt())); void TIM6_IRQHandler(void) __attribute__((interrupt()));
void TIM7_IRQHandler (void) __attribute__((interrupt())); void TIM7_IRQHandler(void) __attribute__((interrupt()));
//void TIM8_BRK_IRQHandler (void) __attribute__((interrupt())); // void TIM8_BRK_IRQHandler (void) __attribute__((interrupt()));
void TIM8_UP_IRQHandler (void) __attribute__((interrupt())); void TIM8_UP_IRQHandler(void) __attribute__((interrupt()));
//void TIM8_TRG_COM_IRQHandler (void) __attribute__((interrupt())); // void TIM8_TRG_COM_IRQHandler (void) __attribute__((interrupt()));
//void TIM8_CC_IRQHandler (void) __attribute__((interrupt())); // void TIM8_CC_IRQHandler (void) __attribute__((interrupt()));
//void TIM9_BRK_IRQHandler (void) __attribute__((interrupt())); // void TIM9_BRK_IRQHandler (void) __attribute__((interrupt()));
void TIM9_UP_IRQHandler (void) __attribute__((interrupt())); void TIM9_UP_IRQHandler(void) __attribute__((interrupt()));
//void TIM9_TRG_COM_IRQHandler (void) __attribute__((interrupt())); // void TIM9_TRG_COM_IRQHandler (void) __attribute__((interrupt()));
//void TIM9_CC_IRQHandler (void) __attribute__((interrupt())); // void TIM9_CC_IRQHandler (void) __attribute__((interrupt()));
//void TIM10_BRK_IRQHandler (void) __attribute__((interrupt())); // void TIM10_BRK_IRQHandler (void) __attribute__((interrupt()));
void TIM10_UP_IRQHandler (void) __attribute__((interrupt())); void TIM10_UP_IRQHandler(void) __attribute__((interrupt()));
//void TIM10_TRG_COM_IRQHandler (void) __attribute__((interrupt())); // void TIM10_TRG_COM_IRQHandler (void) __attribute__((interrupt()));
//void TIM10_CC_IRQHandler (void) __attribute__((interrupt())); // void TIM10_CC_IRQHandler (void) __attribute__((interrupt()));
void EXTI0_IRQHandler(void) __attribute__((interrupt())); void EXTI0_IRQHandler(void) __attribute__((interrupt()));
void EXTI1_IRQHandler(void) __attribute__((interrupt())); void EXTI1_IRQHandler(void) __attribute__((interrupt()));
@@ -79,162 +81,134 @@ void EXTI15_10_IRQHandler(void) __attribute__((interrupt()));
void USART1_IRQHandler(void) void USART1_IRQHandler(void)
{ {
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART_ClearITPendingBit(USART1, USART_IT_RXNE);
} }
} }
void USART2_IRQHandler(void) void USART2_IRQHandler(void)
{ {
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {
{
USART_ClearITPendingBit(USART2, USART_IT_RXNE); USART_ClearITPendingBit(USART2, USART_IT_RXNE);
} }
} }
void USART3_IRQHandler(void) void USART3_IRQHandler(void)
{ {
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) {
{ #if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> debug_interrupr_handler(); // <20><><EFBFBD><EFBFBD> debug <20><><EFBFBD>ڽ<EFBFBD><DABD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݻᱻ debug <20><><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
debug_interrupr_handler(); // <20><><EFBFBD><EFBFBD> debug <20><><EFBFBD>ڽ<EFBFBD><DABD>մ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ݻᱻ debug <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ #endif // <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD> DEBUG_UART_INDEX <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȥ
#endif // <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8><EFBFBD> DEBUG_UART_INDEX <20><><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>Ӧ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ж<EFBFBD>ȥ
USART_ClearITPendingBit(USART3, USART_IT_RXNE); USART_ClearITPendingBit(USART3, USART_IT_RXNE);
} }
} }
void UART4_IRQHandler (void) void UART4_IRQHandler(void)
{ {
if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET) if (USART_GetITStatus(UART4, USART_IT_RXNE) != RESET) {
{
USART_ClearITPendingBit(UART4, USART_IT_RXNE); USART_ClearITPendingBit(UART4, USART_IT_RXNE);
} }
} }
void UART5_IRQHandler (void) void UART5_IRQHandler(void)
{ {
if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET) if (USART_GetITStatus(UART5, USART_IT_RXNE) != RESET) {
{
camera_uart_handler(); camera_uart_handler();
USART_ClearITPendingBit(UART5, USART_IT_RXNE); USART_ClearITPendingBit(UART5, USART_IT_RXNE);
} }
} }
void UART6_IRQHandler (void) void UART6_IRQHandler(void)
{ {
if(USART_GetITStatus(UART6, USART_IT_RXNE) != RESET) if (USART_GetITStatus(UART6, USART_IT_RXNE) != RESET) {
{
USART_ClearITPendingBit(UART6, USART_IT_RXNE); USART_ClearITPendingBit(UART6, USART_IT_RXNE);
} }
} }
void UART7_IRQHandler (void) void UART7_IRQHandler(void)
{ {
if(USART_GetITStatus(UART7, USART_IT_RXNE) != RESET) if (USART_GetITStatus(UART7, USART_IT_RXNE) != RESET) {
{
wireless_module_uart_handler(); wireless_module_uart_handler();
USART_ClearITPendingBit(UART7, USART_IT_RXNE); USART_ClearITPendingBit(UART7, USART_IT_RXNE);
} }
} }
void UART8_IRQHandler (void) void UART8_IRQHandler(void)
{ {
if(USART_GetITStatus(UART8, USART_IT_RXNE) != RESET) if (USART_GetITStatus(UART8, USART_IT_RXNE) != RESET) {
{
gps_uart_callback(); gps_uart_callback();
USART_ClearITPendingBit(UART8, USART_IT_RXNE); USART_ClearITPendingBit(UART8, USART_IT_RXNE);
} }
} }
void DVP_IRQHandler(void) void DVP_IRQHandler(void)
{ {
if (DVP->IFR & RB_DVP_IF_FRM_DONE) if (DVP->IFR & RB_DVP_IF_FRM_DONE) {
{
camera_dvp_handler(); camera_dvp_handler();
DVP->IFR &= ~RB_DVP_IF_FRM_DONE; DVP->IFR &= ~RB_DVP_IF_FRM_DONE;
} }
} }
void EXTI0_IRQHandler(void) void EXTI0_IRQHandler(void)
{ {
if(SET == EXTI_GetITStatus(EXTI_Line0)) if (SET == EXTI_GetITStatus(EXTI_Line0)) {
{
EXTI_ClearITPendingBit(EXTI_Line0); EXTI_ClearITPendingBit(EXTI_Line0);
} }
} }
void EXTI1_IRQHandler(void) void EXTI1_IRQHandler(void)
{ {
if(SET == EXTI_GetITStatus(EXTI_Line1)) if (SET == EXTI_GetITStatus(EXTI_Line1)) {
{
EXTI_ClearITPendingBit(EXTI_Line1); EXTI_ClearITPendingBit(EXTI_Line1);
} }
} }
void EXTI2_IRQHandler(void) void EXTI2_IRQHandler(void)
{ {
if(SET == EXTI_GetITStatus(EXTI_Line2)) if (SET == EXTI_GetITStatus(EXTI_Line2)) {
{
EXTI_ClearITPendingBit(EXTI_Line2); EXTI_ClearITPendingBit(EXTI_Line2);
} }
} }
void EXTI3_IRQHandler(void) void EXTI3_IRQHandler(void)
{ {
if(SET == EXTI_GetITStatus(EXTI_Line3)) if (SET == EXTI_GetITStatus(EXTI_Line3)) {
{
EXTI_ClearITPendingBit(EXTI_Line3); EXTI_ClearITPendingBit(EXTI_Line3);
} }
} }
void EXTI4_IRQHandler(void) void EXTI4_IRQHandler(void)
{ {
if(SET == EXTI_GetITStatus(EXTI_Line4)) if (SET == EXTI_GetITStatus(EXTI_Line4)) {
{
EXTI_ClearITPendingBit(EXTI_Line4); EXTI_ClearITPendingBit(EXTI_Line4);
} }
} }
void EXTI9_5_IRQHandler(void) void EXTI9_5_IRQHandler(void)
{ {
if(SET == EXTI_GetITStatus(EXTI_Line5)) if (SET == EXTI_GetITStatus(EXTI_Line5)) {
{
EXTI_ClearITPendingBit(EXTI_Line5); EXTI_ClearITPendingBit(EXTI_Line5);
} }
if(SET == EXTI_GetITStatus(EXTI_Line6)) if (SET == EXTI_GetITStatus(EXTI_Line6)) {
{
EXTI_ClearITPendingBit(EXTI_Line6); EXTI_ClearITPendingBit(EXTI_Line6);
} }
if(SET == EXTI_GetITStatus(EXTI_Line7)) if (SET == EXTI_GetITStatus(EXTI_Line7)) {
{
EXTI_ClearITPendingBit(EXTI_Line7); EXTI_ClearITPendingBit(EXTI_Line7);
} }
if(SET == EXTI_GetITStatus(EXTI_Line8)) if (SET == EXTI_GetITStatus(EXTI_Line8)) {
{
EXTI_ClearITPendingBit(EXTI_Line8); EXTI_ClearITPendingBit(EXTI_Line8);
} }
if(SET == EXTI_GetITStatus(EXTI_Line9)) if (SET == EXTI_GetITStatus(EXTI_Line9)) {
{
EXTI_ClearITPendingBit(EXTI_Line9); EXTI_ClearITPendingBit(EXTI_Line9);
if (SET == gpio_get_level(E10)) {
potate_button = POTATE_BUTTOM_BACKWARD;
} else {
potate_button = POTATE_BUTTOM_FOREWARD;
}
} }
} }
void EXTI15_10_IRQHandler(void) void EXTI15_10_IRQHandler(void)
{ {
if(SET == EXTI_GetITStatus(EXTI_Line10)) if (SET == EXTI_GetITStatus(EXTI_Line10)) {
{
// <20>˴<EFBFBD><CBB4><EFBFBD>д<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> (A10/B10..E10) <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> // <20>˴<EFBFBD><CBB4><EFBFBD>д<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> (A10/B10..E10) <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>
@@ -242,18 +216,18 @@ void EXTI15_10_IRQHandler(void)
EXTI_ClearITPendingBit(EXTI_Line10); EXTI_ClearITPendingBit(EXTI_Line10);
} }
if(SET == EXTI_GetITStatus(EXTI_Line11)) if (SET == EXTI_GetITStatus(EXTI_Line11)) {
{
EXTI_ClearITPendingBit(EXTI_Line11); EXTI_ClearITPendingBit(EXTI_Line11);
system_delay_us(200);
if (SET == !gpio_get_level(E11)) {
potate_button = POTATE_BUTTOM_PRESS;
}
} }
if(SET == EXTI_GetITStatus(EXTI_Line12)) if (SET == EXTI_GetITStatus(EXTI_Line12)) {
{
EXTI_ClearITPendingBit(EXTI_Line12); EXTI_ClearITPendingBit(EXTI_Line12);
} }
if(SET == EXTI_GetITStatus(EXTI_Line13)) if (SET == EXTI_GetITStatus(EXTI_Line13)) {
{
// -----------------* ToF INT <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *----------------- // -----------------* ToF INT <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *-----------------
tof_module_exti_handler(); tof_module_exti_handler();
// -----------------* ToF INT <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *----------------- // -----------------* ToF INT <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *-----------------
@@ -262,17 +236,14 @@ void EXTI15_10_IRQHandler(void)
// <20>˴<EFBFBD><CBB4><EFBFBD>д<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> (A13/B13..E13) <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD> // <20>˴<EFBFBD><CBB4><EFBFBD>д<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> (A13/B13..E13) <20><><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>
EXTI_ClearITPendingBit(EXTI_Line13); EXTI_ClearITPendingBit(EXTI_Line13);
} }
if(SET == EXTI_GetITStatus(EXTI_Line14)) if (SET == EXTI_GetITStatus(EXTI_Line14)) {
{
// -----------------* DM1XA <20><><EFBFBD>ź<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *----------------- // -----------------* DM1XA <20><><EFBFBD>ź<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *-----------------
dm1xa_light_callback(); dm1xa_light_callback();
// -----------------* DM1XA <20><><EFBFBD>ź<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *----------------- // -----------------* DM1XA <20><><EFBFBD>ź<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *-----------------
EXTI_ClearITPendingBit(EXTI_Line14); EXTI_ClearITPendingBit(EXTI_Line14);
} }
if(SET == EXTI_GetITStatus(EXTI_Line15)) if (SET == EXTI_GetITStatus(EXTI_Line15)) {
{
// -----------------* DM1XA <20><>/<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *----------------- // -----------------* DM1XA <20><>/<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *-----------------
dm1xa_sound_callback(); dm1xa_sound_callback();
// -----------------* DM1XA <20><>/<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *----------------- // -----------------* DM1XA <20><>/<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> Ԥ<><D4A4><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *-----------------
@@ -280,108 +251,76 @@ void EXTI15_10_IRQHandler(void)
} }
} }
void TIM1_UP_IRQHandler(void) void TIM1_UP_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) {
{
TIM_ClearITPendingBit(TIM1, TIM_IT_Update); TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
} }
} }
void TIM2_IRQHandler(void) void TIM2_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
{ TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_ClearITPendingBit(TIM2, TIM_IT_Update );
} }
} }
void TIM3_IRQHandler(void) void TIM3_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {
{ TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
TIM_ClearITPendingBit(TIM3, TIM_IT_Update );
} }
} }
void TIM4_IRQHandler(void) void TIM4_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) {
{ TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
TIM_ClearITPendingBit(TIM4, TIM_IT_Update );
} }
} }
void TIM5_IRQHandler(void) void TIM5_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) {
{ TIM_ClearITPendingBit(TIM5, TIM_IT_Update);
TIM_ClearITPendingBit(TIM5, TIM_IT_Update );
} }
} }
void TIM6_IRQHandler(void) void TIM6_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) {
{ TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
TIM_ClearITPendingBit(TIM6, TIM_IT_Update );
} }
} }
void TIM7_IRQHandler(void) void TIM7_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET) {
{ TIM_ClearITPendingBit(TIM7, TIM_IT_Update);
TIM_ClearITPendingBit(TIM7, TIM_IT_Update );
} }
} }
void TIM8_UP_IRQHandler(void) void TIM8_UP_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET) {
{
TIM_ClearITPendingBit(TIM8, TIM_IT_Update); TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
} }
} }
void TIM9_UP_IRQHandler(void) void TIM9_UP_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM9, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM9, TIM_IT_Update) != RESET) {
{
TIM_ClearITPendingBit(TIM9, TIM_IT_Update); TIM_ClearITPendingBit(TIM9, TIM_IT_Update);
} }
} }
void TIM10_UP_IRQHandler(void) void TIM10_UP_IRQHandler(void)
{ {
if(TIM_GetITStatus(TIM10, TIM_IT_Update) != RESET) if (TIM_GetITStatus(TIM10, TIM_IT_Update) != RESET) {
{
TIM_ClearITPendingBit(TIM10, TIM_IT_Update); TIM_ClearITPendingBit(TIM10, TIM_IT_Update);
} }
} }
//.section .text.vector_handler, "ax", @progbits //.section .text.vector_handler, "ax", @progbits
// .weak EXTI0_IRQHandler /* EXTI Line 0 */ // .weak EXTI0_IRQHandler /* EXTI Line 0 */
@@ -468,26 +407,23 @@ void TIM10_UP_IRQHandler(void)
// .weak DMA2_Channel11_IRQHandler /* DMA2 Channel 11 */ // .weak DMA2_Channel11_IRQHandler /* DMA2 Channel 11 */
/******************************************************************************* /*******************************************************************************
* Function Name : NMI_Handler * Function Name : NMI_Handler
* Description : This function handles NMI exception. * Description : This function handles NMI exception.
* Input : None * Input : None
* Return : None * Return : None
*******************************************************************************/ *******************************************************************************/
void NMI_Handler(void) void NMI_Handler(void)
{ {
} }
/******************************************************************************* /*******************************************************************************
* Function Name : HardFault_Handler * Function Name : HardFault_Handler
* Description : This function handles Hard Fault exception. * Description : This function handles Hard Fault exception.
* Input : None * Input : None
* Return : None * Return : None
*******************************************************************************/ *******************************************************************************/
void HardFault_Handler(void) void HardFault_Handler(void)
{ {
while (1) while (1) {
{ }
}
} }

View File

@@ -34,6 +34,9 @@
********************************************************************************************************************/ ********************************************************************************************************************/
#include "zf_common_headfile.h" #include "zf_common_headfile.h"
#include "gl_headfile.h" #include "gl_headfile.h"
#include "cw_servo.h"
#include "by_pt_button.h"
#include "by_fan_control.h"
uint8 (*Img_Gray)[MT9V03X_W]; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V03X_W <20>е<EFBFBD> uint8 <20><><EFBFBD>͵Ķ<CDB5>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> uint8 (*Img_Gray)[MT9V03X_W]; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V03X_W <20>е<EFBFBD> uint8 <20><><EFBFBD>͵Ķ<CDB5>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//uint8 *mt9v03x_image_copy[0]; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> uint8 <20><><EFBFBD>͵<EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> //uint8 *mt9v03x_image_copy[0]; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> uint8 <20><><EFBFBD>͵<EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
@@ -49,7 +52,6 @@ float32 mid_left[PT_MAXLEN][2], mid_right[PT_MAXLEN][2];
sint32 mid_left_count, mid_right_count; sint32 mid_left_count, mid_right_count;
//<2F><><EFBFBD>ұ<EFBFBD><D2B1>߾ֲ<DFBE><D6B2>Ƕȱ仯<C8B1><E4BBAF>+<2B>Ǽ<EFBFBD><C7BC><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> //<2F><><EFBFBD>ұ<EFBFBD><D2B1>߾ֲ<DFBE><D6B2>Ƕȱ仯<C8B1><E4BBAF>+<2B>Ǽ<EFBFBD><C7BC><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
float angle_new_left[PT_MAXLEN]; float angle_new_left[PT_MAXLEN];
float angle_new_right[PT_MAXLEN]; float angle_new_right[PT_MAXLEN];
@@ -88,15 +90,18 @@ int frame_count = 0;
void img_processing(); void img_processing();
void get_corners(); void get_corners();
void adaptiveThreshold(uint8_t* img_data, uint8_t* output_data, int width, int height, int block, uint8_t clip_value);
void threshold(uint8_t *img_data, uint8_t *output_data, int width, int height, int thres);
int main(void) int main(void)
{ {
clock_init(SYSTEM_CLOCK_120M); // <20><>ʼ<EFBFBD><CABC>оƬʱ<C6AC><CAB1> <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>Ϊ 120MHz clock_init(SYSTEM_CLOCK_120M); // <20><>ʼ<EFBFBD><CABC>оƬʱ<C6AC><CAB1> <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>Ϊ 120MHz
debug_init(); // <20><><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>MPU ʱ<><CAB1> <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD> debug_init(); // <20><><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>MPU ʱ<><CAB1> <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
ips114_init();
mt9v03x_init(); mt9v03x_init();
ips114_init();
by_gpio_init();
by_exit_init();
by_pwm_init();
cw_servo_init();
while (1) { while (1) {
//while (frame_count < 20) { //while (frame_count < 20) {
@@ -138,33 +143,4 @@ int main(void)
} }
} }
/*
void threshold(uint8_t *img_data, uint8_t *output_data, int width, int height, int thres){
for(int y=0; y<height; y++){
for(int x=0; x<width; x++){
output_data[x+y*width] = img_data[x+y*width]>thres ? 255 : 0;
}
}
}
void adaptiveThreshold(uint8_t* img_data, uint8_t* output_data, int width, int height, int block, uint8_t clip_value){
int half_block = block / 2;
for(int y=half_block; y<height-half_block; y++){
for(int x=half_block; x<width-half_block; x++){
// <20><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>ֵ
int thres = 0;
for(int dy=-half_block; dy<=half_block; dy++){
for(int dx=-half_block; dx<=half_block; dx++){
thres += img_data[(x+dx)+(y+dy)*width];
}
}
thres = thres / (block * block) - clip_value;
// <20><><EFBFBD>ж<EFBFBD>ֵ<EFBFBD><D6B5>
output_data[x+y*width] = img_data[x+y*width]>thres ? 255 : 0;
}
}
}*/

View File

@@ -1,37 +1,37 @@
/********************************************************************************************************************* /*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4> * CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF> * Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
* *
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> * <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
* *
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD> * <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
* *
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤ * <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤ * <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL * <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
* *
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD> * <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/> * <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
* *
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾 * <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD> * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD> * <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* *
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_typedef * <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_typedef
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ * <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5> * <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6 * <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/ * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
* *
* <20>޸ļ<DEB8>¼ * <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע * <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version * 2022-09-15 <20><>W first version
********************************************************************************************************************/ ********************************************************************************************************************/
#ifndef _zf_common_typedef_h_ #ifndef _zf_common_typedef_h_
#define _zf_common_typedef_h_ #define _zf_common_typedef_h_
@@ -45,36 +45,42 @@
//=================================================== <20><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> =================================================== //=================================================== <20><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> ===================================================
//#define COMPATIBLE_WITH_OLDER_VERSIONS // <20><><EFBFBD>ݾɰ濪Դ<E6BFAA><D4B4><EFBFBD>ӿ<EFBFBD> // #define COMPATIBLE_WITH_OLDER_VERSIONS // <20><><EFBFBD>ݾɰ濪Դ<E6BFAA><D4B4><EFBFBD>ӿ<EFBFBD>
#define USE_ZF_TYPEDEF (1) // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #define USE_ZF_TYPEDEF (1) // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if USE_ZF_TYPEDEF #if USE_ZF_TYPEDEF
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> stdint.h <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բü<D4B2> // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> stdint.h <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բü<D4B2>
typedef unsigned char uint8; // <20>޷<EFBFBD><DEB7><EFBFBD> 8 bits
typedef unsigned short int uint16; // <20>޷<EFBFBD><DEB7><EFBFBD> 16 bits
typedef unsigned int uint32; // <20>޷<EFBFBD><DEB7><EFBFBD> 32 bits
typedef unsigned long long uint64; // <20>޷<EFBFBD><DEB7><EFBFBD> 64 bits
typedef signed char int8; // <20>з<EFBFBD><D0B7><EFBFBD> 8 bits // <20><><EFBFBD>滰˵<E6BBB0><CBB5>ͦ<EFBFBD>ã<EFBFBD>uint32(aka unsigned int) <20><> uint32_t(aka unsigned long) <20><>һ<EFBFBD><D2BB>
typedef signed short int int16; // <20>з<EFBFBD><EFBFBD><EFBFBD> 16 bits // <20><>Ȼ<EFBFBD><EFBFBD> 32 λ<><CEBB><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>Ǿ<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ܲ<EFBFBD>ˬ<EFBFBD><CBAC><EFBFBD><EFBFBD><EFBFBD>¸ĵ<C2B8>
typedef signed int int32; // <20>з<EFBFBD><EFBFBD><EFBFBD> 32 bits // typedef unsigned int uint32; // <20>޷<EFBFBD><EFBFBD><EFBFBD> 32 bits
typedef signed long long int64; // <20>з<EFBFBD><D0B7><EFBFBD> 64 bits
typedef volatile uint8 vuint8; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޷<EFBFBD><DEB7><EFBFBD> 8 bits typedef unsigned char uint8; // <20>޷<EFBFBD><DEB7><EFBFBD> 8 bits
typedef volatile uint16 vuint16; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޷<EFBFBD><DEB7><EFBFBD> 16 bits typedef unsigned short uint16; // <20>޷<EFBFBD><DEB7><EFBFBD> 16 bits
typedef volatile uint32 vuint32; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޷<EFBFBD><DEB7><EFBFBD> 32 bits
typedef volatile uint64 vuint64; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޷<EFBFBD><DEB7><EFBFBD> 64 bits
typedef volatile int8 vint8; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 8 bits typedef unsigned long uint32; // <20>޷<EFBFBD><DEB7><EFBFBD> 32 bits
typedef volatile int16 vint16; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 16 bits typedef unsigned long long uint64; // <20>޷<EFBFBD><DEB7><EFBFBD> 64 bits
typedef volatile int32 vint32; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 32 bits
typedef volatile int64 vint64; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 64 bits
#define ZF_ENABLE (1) typedef signed char int8; // <20>з<EFBFBD><D0B7><EFBFBD> 8 bits
#define ZF_DISABLE (0) typedef signed short int16; // <20>з<EFBFBD><D0B7><EFBFBD> 16 bits
typedef signed long int32; // <20>з<EFBFBD><D0B7><EFBFBD> 32 bits
typedef signed long long int64; // <20>з<EFBFBD><D0B7><EFBFBD> 64 bits
#define ZF_TRUE (1) typedef volatile uint8 vuint8; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޷<EFBFBD><DEB7><EFBFBD> 8 bits
#define ZF_FALSE (0) typedef volatile uint16 vuint16; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޷<EFBFBD><DEB7><EFBFBD> 16 bits
typedef volatile uint32 vuint32; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޷<EFBFBD><DEB7><EFBFBD> 32 bits
typedef volatile uint64 vuint64; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޷<EFBFBD><DEB7><EFBFBD> 64 bits
typedef volatile int8 vint8; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 8 bits
typedef volatile int16 vint16; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 16 bits
typedef volatile int32 vint32; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 32 bits
typedef volatile int64 vint64; // <20>ױ<EFBFBD><D7B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> 64 bits
#define ZF_ENABLE (1)
#define ZF_DISABLE (0)
#define ZF_TRUE (1)
#define ZF_FALSE (0)
#endif #endif
//=================================================== <20><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> =================================================== //=================================================== <20><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> ===================================================

View File

@@ -1,58 +1,58 @@
/********************************************************************************************************************* /*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library 即CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库 * CH32V307VCT6 Opensourec Library 即CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技 * Copyright (c) 2022 SEEKFREE 逐飞科技
* *
* 本文件是CH32V307VCT6 开源库的一部分 * 本文件是 CH32V307VCT6 开源库的一部分
* *
* CH32V307VCT6 开源库 是免费软件 * CH32V307VCT6 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU通用公共许可证的条款 * 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU 通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * 即 GPL 的第 3 版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
* *
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证 * 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL * 更多细节请参见 GPL
* *
* 您应该在收到本开源库的同时收到一份 GPL 的副本 * 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/> * 如果没有,请参阅<https://www.gnu.org/licenses/>
* *
* 额外注明: * 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 * 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) * 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
* *
* 文件名称 zf_device_imu660ra * 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司 * 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 MounRiver Studio V1.8.1 * 开发环境 MounRiver Studio V1.8.1
* 适用平台 CH32V307VCT6 * 适用平台 CH32V307VCT6
* 店铺链接 https://seekfree.taobao.com/ * 店铺链接 https://seekfree.taobao.com/
* *
* 修改记录 * 修改记录
* 日期 作者 备注 * 日期 作者 备注
* 2022-09-15 大W first version * 2022-09-15 大 W first version
********************************************************************************************************************/ ********************************************************************************************************************/
/********************************************************************************************************************* /*********************************************************************************************************************
* 接线定义: * 接线定义:
* ------------------------------------ * ------------------------------------
* 模块管脚 单片机管脚 * 模块管脚 单片机管脚
* // 硬件 SPI 引脚 * // 硬件 SPI 引脚
* SCL/SPC 查看 zf_device_imu660ra.h 中 IMU660RA_SPC_PIN 宏定义 * SCL/SPC 查看 zf_device_imu660ra.h 中 IMU660RA_SPC_PIN 宏定义
* SDA/DSI 查看 zf_device_imu660ra.h 中 IMU660RA_SDI_PIN 宏定义 * SDA/DSI 查看 zf_device_imu660ra.h 中 IMU660RA_SDI_PIN 宏定义
* SA0/SDO 查看 zf_device_imu660ra.h 中 IMU660RA_SDO_PIN 宏定义 * SA0/SDO 查看 zf_device_imu660ra.h 中 IMU660RA_SDO_PIN 宏定义
* CS 查看 zf_device_imu660ra.h 中 IMU660RA_CS_PIN 宏定义 * CS 查看 zf_device_imu660ra.h 中 IMU660RA_CS_PIN 宏定义
* VCC 3.3V电源 * VCC 3.3V 电源
* GND 电源地 * GND 电源地
* 其余引脚悬空 * 其余引脚悬空
* *
* // 软件 IIC 引脚 * // 软件 IIC 引脚
* SCL/SPC 查看 zf_device_imu660ra.h 中 IMU660RA_SCL_PIN 宏定义 * SCL/SPC 查看 zf_device_imu660ra.h 中 IMU660RA_SCL_PIN 宏定义
* SDA/DSI 查看 zf_device_imu660ra.h 中 IMU660RA_SDA_PIN 宏定义 * SDA/DSI 查看 zf_device_imu660ra.h 中 IMU660RA_SDA_PIN 宏定义
* VCC 3.3V电源 * VCC 3.3V 电源
* GND 电源地 * GND 电源地
* 其余引脚悬空 * 其余引脚悬空
* ------------------------------------ * ------------------------------------
********************************************************************************************************************/ ********************************************************************************************************************/
#include "zf_common_debug.h" #include "zf_common_debug.h"
#include "zf_driver_delay.h" #include "zf_driver_delay.h"
@@ -63,17 +63,22 @@
#include "zf_device_imu660ra.h" #include "zf_device_imu660ra.h"
int16 imu660ra_gyro_x = 0, imu660ra_gyro_y = 0, imu660ra_gyro_z = 0; // 三轴陀螺仪数据 gyro (陀螺仪) int16 imu660ra_gyro_x = 0;
int16 imu660ra_acc_x = 0, imu660ra_acc_y = 0, imu660ra_acc_z = 0; // 三轴加速度计数据 acc (accelerometer 加速度计) int16 imu660ra_gyro_y = 0;
float imu660ra_transition_factor[2] = {4096, 16.4}; int16 imu660ra_gyro_z = 0; // 三轴陀螺仪数据 gyro (陀螺仪)
int16 imu660ra_acc_x = 0;
int16 imu660ra_acc_y = 0;
int16 imu660ra_acc_z = 0; // 三轴加速度计数据 acc (accelerometer 加速度计)
float imu660ra_temperature = 0;
float imu660ra_transition_factor[2] = {4096, 16.4f};
#if IMU660RA_USE_SOFT_IIC #if IMU660RA_USE_SOFT_IIC
static soft_iic_info_struct imu660ra_iic_struct; static soft_iic_info_struct imu660ra_iic_struct;
#define imu660ra_write_register(reg, data) (soft_iic_write_8bit_register(&imu660ra_iic_struct, (reg), (data))) #define imu660ra_write_register(reg, data) (soft_iic_write_8bit_register(&imu660ra_iic_struct, (reg), (data)))
#define imu660ra_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660ra_iic_struct, (reg), (data), (len))) #define imu660ra_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660ra_iic_struct, (reg), (data), (len)))
#define imu660ra_read_register(reg) (soft_iic_read_8bit_register(&imu660ra_iic_struct, (reg))) #define imu660ra_read_register(reg) (soft_iic_read_8bit_register(&imu660ra_iic_struct, (reg)))
#define imu660ra_read_registers(reg, data, len) (soft_iic_read_8bit_registers(&imu660ra_iic_struct, (reg), (data), (len))) #define imu660ra_read_registers(reg, data, len) (soft_iic_read_8bit_registers(&imu660ra_iic_struct, (reg), (data), (len)))
#else #else
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
// 函数简介 IMU660RA 写寄存器 // 函数简介 IMU660RA 写寄存器
@@ -136,9 +141,8 @@ static void imu660ra_read_registers(uint8 reg, uint8 *data, uint32 len)
IMU660RA_CS(0); IMU660RA_CS(0);
spi_read_8bit_registers(IMU660RA_SPI, reg | IMU660RA_SPI_R, temp_data, len + 1); spi_read_8bit_registers(IMU660RA_SPI, reg | IMU660RA_SPI_R, temp_data, len + 1);
IMU660RA_CS(1); IMU660RA_CS(1);
for(int i = 0; i < len; i ++) for (int i = 0; i < len; i++) {
{ *(data++) = temp_data[i + 1];
*(data ++) = temp_data[i + 1];
} }
} }
#endif #endif
@@ -150,20 +154,19 @@ static void imu660ra_read_registers(uint8 reg, uint8 *data, uint32 len)
// 使用示例 imu660ra_self_check(); // 使用示例 imu660ra_self_check();
// 备注信息 内部调用 // 备注信息 内部调用
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
static uint8 imu660ra_self_check (void) static uint8 imu660ra_self_check(void)
{ {
uint8 dat = 0, return_state = 0; uint8 dat = 0;
uint8 return_state = 0;
uint16 timeout_count = 0; uint16 timeout_count = 0;
do do {
{ if (timeout_count++ > IMU660RA_TIMEOUT_COUNT) {
if(timeout_count ++ > IMU660RA_TIMEOUT_COUNT) return_state = 1;
{
return_state = 1;
break; break;
} }
dat = imu660ra_read_register(IMU660RA_CHIP_ID); dat = imu660ra_read_register(IMU660RA_CHIP_ID);
system_delay_ms(1); system_delay_ms(1);
}while(0x24 != dat); // 读取设备ID是否等于0X24如果不是0X24则认为没检测到设备 } while (0x24 != dat); // 读取设备 ID 是否等于 0X24如果不是 0X24 则认为没检测到设备
return return_state; return return_state;
} }
@@ -172,34 +175,42 @@ static uint8 imu660ra_self_check (void)
// 参数说明 void // 参数说明 void
// 返回参数 void // 返回参数 void
// 使用示例 imu660ra_get_acc(); // 执行该函数后,直接查看对应的变量即可 // 使用示例 imu660ra_get_acc(); // 执行该函数后,直接查看对应的变量即可
// 备注信息 使用 SPI 的采集时间为69us // 备注信息 使用 SPI 的采集时间为 69us
// 使用 IIC 的采集时间为126us 采集加速度计的时间与采集陀螺仪的时间一致的原因是都只是读取寄存器数据 // 使用 IIC 的采集时间为 126us 采集加速度计的时间与采集陀螺仪的时间一致的原因是都只是读取寄存器数据
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
void imu660ra_get_acc (void) void imu660ra_get_acc(void)
{ {
uint8 dat[6]; uint8 dat[6];
imu660ra_read_registers(IMU660RA_ACC_ADDRESS, dat, 6); imu660ra_read_registers(IMU660RA_ACC_ADDRESS, dat, 6);
imu660ra_acc_x = (int16)(((uint16)dat[1]<<8 | dat[0])); imu660ra_acc_x = (int16)(((uint16)dat[1] << 8 | dat[0]));
imu660ra_acc_y = (int16)(((uint16)dat[3]<<8 | dat[2])); imu660ra_acc_y = (int16)(((uint16)dat[3] << 8 | dat[2]));
imu660ra_acc_z = (int16)(((uint16)dat[5]<<8 | dat[4])); imu660ra_acc_z = (int16)(((uint16)dat[5] << 8 | dat[4]));
} }
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
// 函数简介 获取 IMU660RA 陀螺仪数据 // 函数简介 获取 IMU660RA 陀螺仪数据
// 参数说明 void // 参数说明 void
// 返回参数 void // 返回参数 void
// 使用示例 imu660ra_get_gyro(); // 执行该函数后,直接查看对应的变量即可 // 使用示例 imu660ra_get_gyro(); // 执行该函数后,直接查看对应的变量即可
// 备注信息 使用 SPI 的采集时间为69us // 备注信息 使用 SPI 的采集时间为 69us
// 使用 IIC 的采集时间为126us // 使用 IIC 的采集时间为 126us
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
void imu660ra_get_gyro (void) void imu660ra_get_gyro(void)
{ {
uint8 dat[6]; uint8 dat[6];
imu660ra_read_registers(IMU660RA_GYRO_ADDRESS, dat, 6); imu660ra_read_registers(IMU660RA_GYRO_ADDRESS, dat, 6);
imu660ra_gyro_x = (int16)(((uint16)dat[1]<<8 | dat[0])); imu660ra_gyro_x = (int16)(((uint16)dat[1] << 8 | dat[0]));
imu660ra_gyro_y = (int16)(((uint16)dat[3]<<8 | dat[2])); imu660ra_gyro_y = (int16)(((uint16)dat[3] << 8 | dat[2]));
imu660ra_gyro_z = (int16)(((uint16)dat[5]<<8 | dat[4])); imu660ra_gyro_z = (int16)(((uint16)dat[5] << 8 | dat[4]));
}
void imu660ra_get_temperature(void)
{
uint8_t dat[2];
imu660ra_read_registers(IMU660RA_TEMP_ADDRESS, dat, 2);
imu660ra_temperature = (int16_t)((uint16_t)dat[1] << 8 | dat[0]);
imu660ra_temperature = imu660ra_temperature / 512.0f + 23.0f;
} }
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
@@ -209,20 +220,20 @@ void imu660ra_get_gyro (void)
// 使用示例 imu660ra_init(); // 使用示例 imu660ra_init();
// 备注信息 // 备注信息
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
uint8 imu660ra_init (void) uint8 imu660ra_init(void)
{ {
uint8 return_state = 0; uint8 return_state = 0;
system_delay_ms(20); // 等待设备上电成功 system_delay_ms(20); // 等待设备上电成功
#if IMU660RA_USE_SOFT_IIC #if IMU660RA_USE_SOFT_IIC
soft_iic_init(&imu660ra_iic_struct, IMU660RA_DEV_ADDR, IMU660RA_SOFT_IIC_DELAY, IMU660RA_SCL_PIN, IMU660RA_SDA_PIN); // 配置 IMU660RA 的 IIC 端口 soft_iic_init(&imu660ra_iic_struct, IMU660RA_DEV_ADDR, IMU660RA_SOFT_IIC_DELAY, IMU660RA_SCL_PIN, IMU660RA_SDA_PIN); // 配置 IMU660RA 的 IIC 端口
#else #else
spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, SPI_CS_NULL); // 配置 IMU660RA 的 SPI 端口 spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, SPI_CS_NULL); // 配置 IMU660RA 的 SPI 端口
gpio_init(IMU660RA_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // 配置 IMU660RA 的CS端口 gpio_init(IMU660RA_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // 配置 IMU660RA 的 CS 端口
imu660ra_read_register(IMU660RA_CHIP_ID); // 读取一下设备ID 将设备设置为SPI模式 imu660ra_read_register(IMU660RA_CHIP_ID); // 读取一下设备 ID 将设备设置为 SPI 模式
#endif #endif
do{ do {
if(imu660ra_self_check()) // IMU660RA 自检 if (imu660ra_self_check()) // IMU660RA 自检
{ {
// 如果程序在输出了断言信息 并且提示出错位置在这里 // 如果程序在输出了断言信息 并且提示出错位置在这里
// 那么就是 IMU660RA 自检出错并超时退出了 // 那么就是 IMU660RA 自检出错并超时退出了
@@ -231,13 +242,13 @@ uint8 imu660ra_init (void)
return_state = 1; return_state = 1;
break; break;
} }
imu660ra_write_register(IMU660RA_PWR_CONF, 0x00); // 关闭高级省电模式 imu660ra_write_register(IMU660RA_PWR_CONF, 0x00); // 关闭高级省电模式
system_delay_ms(1); system_delay_ms(1);
imu660ra_write_register(IMU660RA_INIT_CTRL, 0x00); // 开始对模块进行初始化配置 imu660ra_write_register(IMU660RA_INIT_CTRL, 0x00); // 开始对模块进行初始化配置
imu660ra_write_registers(IMU660RA_INIT_DATA, imu660ra_config_file, sizeof(imu660ra_config_file)); // 输出配置文件 imu660ra_write_registers(IMU660RA_INIT_DATA, imu660ra_config_file, sizeof(imu660ra_config_file)); // 输出配置文件
imu660ra_write_register(IMU660RA_INIT_CTRL, 0x01); // 初始化配置结束 imu660ra_write_register(IMU660RA_INIT_CTRL, 0x01); // 初始化配置结束
system_delay_ms(20); system_delay_ms(20);
if(1 != imu660ra_read_register(IMU660RA_INT_STA)) // 检查是否配置完成 if (1 != imu660ra_read_register(IMU660RA_INT_STA)) // 检查是否配置完成
{ {
// 如果程序在输出了断言信息 并且提示出错位置在这里 // 如果程序在输出了断言信息 并且提示出错位置在这里
// 那么就是 IMU660RA 配置初始化文件出错了 // 那么就是 IMU660RA 配置初始化文件出错了
@@ -246,45 +257,38 @@ uint8 imu660ra_init (void)
return_state = 1; return_state = 1;
break; break;
} }
imu660ra_write_register(IMU660RA_PWR_CTRL, 0x0E); // 开启性能模式 使能陀螺仪、加速度、温度传感器 imu660ra_write_register(IMU660RA_PWR_CTRL, 0x0E); // 开启性能模式 使能陀螺仪、加速度、温度传感器
imu660ra_write_register(IMU660RA_ACC_CONF, 0xA7); // 加速度采集配置 性能模式 正常采集 50Hz 采样频率 imu660ra_write_register(IMU660RA_ACC_CONF, 0xA7); // 加速度采集配置 性能模式 正常采集 50Hz 采样频率
imu660ra_write_register(IMU660RA_GYR_CONF, 0xA9); // 陀螺仪采集配置 性能模式 正常采集 200Hz 采样频率 imu660ra_write_register(IMU660RA_GYR_CONF, 0xA9); // 陀螺仪采集配置 性能模式 正常采集 200Hz 采样频率
// IMU660RA_ACC_SAMPLE 寄存器 // IMU660RA_ACC_SAMPLE 寄存器
// 设置为 0x00 加速度计量程为 ±2 g 获取到的加速度计数据除以 16384 可以转化为带物理单位的数据 单位 g(m/s^2) // 设置为 0x00 加速度计量程为 ±2 g 获取到的加速度计数据除以 16384 可以转化为带物理单位的数据 单位 g(m/s^2)
// 设置为 0x01 加速度计量程为 ±4 g 获取到的加速度计数据除以 8192 可以转化为带物理单位的数据 单位 g(m/s^2) // 设置为 0x01 加速度计量程为 ±4 g 获取到的加速度计数据除以 8192 可以转化为带物理单位的数据 单位 g(m/s^2)
// 设置为 0x02 加速度计量程为 ±8 g 获取到的加速度计数据除以 4096 可以转化为带物理单位的数据 单位 g(m/s^2) // 设置为 0x02 加速度计量程为 ±8 g 获取到的加速度计数据除以 4096 可以转化为带物理单位的数据 单位 g(m/s^2)
// 设置为 0x03 加速度计量程为 ±16 g 获取到的加速度计数据除以 2048 可以转化为带物理单位的数据 单位 g(m/s^2) // 设置为 0x03 加速度计量程为 ±16 g 获取到的加速度计数据除以 2048 可以转化为带物理单位的数据 单位 g(m/s^2)
switch(IMU660RA_ACC_SAMPLE_DEFAULT) switch (IMU660RA_ACC_SAMPLE_DEFAULT) {
{ default: {
default:
{
zf_log(0, "IMU660RA_ACC_SAMPLE_DEFAULT set error."); zf_log(0, "IMU660RA_ACC_SAMPLE_DEFAULT set error.");
return_state = 1; return_state = 1;
}break; } break;
case IMU660RA_ACC_SAMPLE_SGN_2G: case IMU660RA_ACC_SAMPLE_SGN_2G: {
{
imu660ra_write_register(IMU660RA_ACC_RANGE, 0x00); imu660ra_write_register(IMU660RA_ACC_RANGE, 0x00);
imu660ra_transition_factor[0] = 16384; imu660ra_transition_factor[0] = 16384;
}break; } break;
case IMU660RA_ACC_SAMPLE_SGN_4G: case IMU660RA_ACC_SAMPLE_SGN_4G: {
{
imu660ra_write_register(IMU660RA_ACC_RANGE, 0x01); imu660ra_write_register(IMU660RA_ACC_RANGE, 0x01);
imu660ra_transition_factor[0] = 8192; imu660ra_transition_factor[0] = 8192;
}break; } break;
case IMU660RA_ACC_SAMPLE_SGN_8G: case IMU660RA_ACC_SAMPLE_SGN_8G: {
{
imu660ra_write_register(IMU660RA_ACC_RANGE, 0x02); imu660ra_write_register(IMU660RA_ACC_RANGE, 0x02);
imu660ra_transition_factor[0] = 4096; imu660ra_transition_factor[0] = 4096;
}break; } break;
case IMU660RA_ACC_SAMPLE_SGN_16G: case IMU660RA_ACC_SAMPLE_SGN_16G: {
{
imu660ra_write_register(IMU660RA_ACC_RANGE, 0x03); imu660ra_write_register(IMU660RA_ACC_RANGE, 0x03);
imu660ra_transition_factor[0] = 2048; imu660ra_transition_factor[0] = 2048;
}break; } break;
} }
if(1 == return_state) if (1 == return_state) {
{
break; break;
} }
@@ -294,45 +298,35 @@ uint8 imu660ra_init (void)
// 设置为 0x02 陀螺仪量程为 ±500 dps 获取到的陀螺仪数据除以 65.6 可以转化为带物理单位的数据 单位为 °/s // 设置为 0x02 陀螺仪量程为 ±500 dps 获取到的陀螺仪数据除以 65.6 可以转化为带物理单位的数据 单位为 °/s
// 设置为 0x01 陀螺仪量程为 ±1000 dps 获取到的陀螺仪数据除以 32.8 可以转化为带物理单位的数据 单位为 °/s // 设置为 0x01 陀螺仪量程为 ±1000 dps 获取到的陀螺仪数据除以 32.8 可以转化为带物理单位的数据 单位为 °/s
// 设置为 0x00 陀螺仪量程为 ±2000 dps 获取到的陀螺仪数据除以 16.4 可以转化为带物理单位的数据 单位为 °/s // 设置为 0x00 陀螺仪量程为 ±2000 dps 获取到的陀螺仪数据除以 16.4 可以转化为带物理单位的数据 单位为 °/s
switch(IMU660RA_GYRO_SAMPLE_DEFAULT) switch (IMU660RA_GYRO_SAMPLE_DEFAULT) {
{ default: {
default:
{
zf_log(0, "IMU660RA_GYRO_SAMPLE_DEFAULT set error."); zf_log(0, "IMU660RA_GYRO_SAMPLE_DEFAULT set error.");
return_state = 1; return_state = 1;
}break; } break;
case IMU660RA_GYRO_SAMPLE_SGN_125DPS: case IMU660RA_GYRO_SAMPLE_SGN_125DPS: {
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x04); imu660ra_write_register(IMU660RA_GYR_RANGE, 0x04);
imu660ra_transition_factor[1] = 262.4; imu660ra_transition_factor[1] = 262.4;
}break; } break;
case IMU660RA_GYRO_SAMPLE_SGN_250DPS: case IMU660RA_GYRO_SAMPLE_SGN_250DPS: {
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x03); imu660ra_write_register(IMU660RA_GYR_RANGE, 0x03);
imu660ra_transition_factor[1] = 131.2; imu660ra_transition_factor[1] = 131.2;
}break; } break;
case IMU660RA_GYRO_SAMPLE_SGN_500DPS: case IMU660RA_GYRO_SAMPLE_SGN_500DPS: {
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x02); imu660ra_write_register(IMU660RA_GYR_RANGE, 0x02);
imu660ra_transition_factor[1] = 65.6; imu660ra_transition_factor[1] = 65.6;
}break; } break;
case IMU660RA_GYRO_SAMPLE_SGN_1000DPS: case IMU660RA_GYRO_SAMPLE_SGN_1000DPS: {
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x01); imu660ra_write_register(IMU660RA_GYR_RANGE, 0x01);
imu660ra_transition_factor[1] = 32.8; imu660ra_transition_factor[1] = 32.8;
}break; } break;
case IMU660RA_GYRO_SAMPLE_SGN_2000DPS: case IMU660RA_GYRO_SAMPLE_SGN_2000DPS: {
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x00); imu660ra_write_register(IMU660RA_GYR_RANGE, 0x00);
imu660ra_transition_factor[1] = 16.4; imu660ra_transition_factor[1] = 16.4;
}break; } break;
} }
if(1 == return_state) if (1 == return_state) {
{
break; break;
} }
}while(0); } while (0);
return return_state; return return_state;
} }

View File

@@ -1,131 +1,136 @@
/********************************************************************************************************************* /*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library 即CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库 * CH32V307VCT6 Opensourec Library 即CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技 * Copyright (c) 2022 SEEKFREE 逐飞科技
* *
* 本文件是CH32V307VCT6 开源库的一部分 * 本文件是CH32V307VCT6 开源库的一部分
* *
* CH32V307VCT6 开源库 是免费软件 * CH32V307VCT6 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU通用公共许可证的条款 * 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU通用公共许可证的条款
* 即 GPL 的第3版即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * 即 GPL 的第3版即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
* *
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证 * 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL * 更多细节请参见 GPL
* *
* 您应该在收到本开源库的同时收到一份 GPL 的副本 * 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/> * 如果没有,请参阅<https://www.gnu.org/licenses/>
* *
* 额外注明: * 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 * 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) * 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
* *
* 文件名称 zf_device_imu660ra * 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司 * 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 MounRiver Studio V1.8.1 * 开发环境 MounRiver Studio V1.8.1
* 适用平台 CH32V307VCT6 * 适用平台 CH32V307VCT6
* 店铺链接 https://seekfree.taobao.com/ * 店铺链接 https://seekfree.taobao.com/
* *
* 修改记录 * 修改记录
* 日期 作者 备注 * 日期 作者 备注
* 2022-09-15 大W first version * 2022-09-15 大W first version
********************************************************************************************************************/ ********************************************************************************************************************/
/********************************************************************************************************************* /*********************************************************************************************************************
* 接线定义: * 接线定义:
* ------------------------------------ * ------------------------------------
* 模块管脚 单片机管脚 * 模块管脚 单片机管脚
* // 硬件 SPI 引脚 * // 硬件 SPI 引脚
* SCL/SPC 查看 zf_device_imu660ra.h 中 IMU660RA_SPC_PIN 宏定义 * SCL/SPC 查看 zf_device_imu660ra.h 中 IMU660RA_SPC_PIN 宏定义
* SDA/DSI 查看 zf_device_imu660ra.h 中 IMU660RA_SDI_PIN 宏定义 * SDA/DSI 查看 zf_device_imu660ra.h 中 IMU660RA_SDI_PIN 宏定义
* SA0/SDO 查看 zf_device_imu660ra.h 中 IMU660RA_SDO_PIN 宏定义 * SA0/SDO 查看 zf_device_imu660ra.h 中 IMU660RA_SDO_PIN 宏定义
* CS 查看 zf_device_imu660ra.h 中 IMU660RA_CS_PIN 宏定义 * CS 查看 zf_device_imu660ra.h 中 IMU660RA_CS_PIN 宏定义
* VCC 3.3V电源 * VCC 3.3V电源
* GND 电源地 * GND 电源地
* 其余引脚悬空 * 其余引脚悬空
* *
* // 软件 IIC 引脚 * // 软件 IIC 引脚
* SCL/SPC 查看 zf_device_imu660ra.h 中 IMU660RA_SCL_PIN 宏定义 * SCL/SPC 查看 zf_device_imu660ra.h 中 IMU660RA_SCL_PIN 宏定义
* SDA/DSI 查看 zf_device_imu660ra.h 中 IMU660RA_SDA_PIN 宏定义 * SDA/DSI 查看 zf_device_imu660ra.h 中 IMU660RA_SDA_PIN 宏定义
* VCC 3.3V电源 * VCC 3.3V电源
* GND 电源地 * GND 电源地
* 其余引脚悬空 * 其余引脚悬空
* ------------------------------------ * ------------------------------------
********************************************************************************************************************/ ********************************************************************************************************************/
#ifndef _zf_device_imu660ra_h_ #ifndef _zf_device_imu660ra_h_
#define _zf_device_imu660ra_h_ #define _zf_device_imu660ra_h_
#include "zf_common_typedef.h" #include "zf_common_typedef.h"
#define IMU660RA_USE_SOFT_IIC (0) // 默认使用硬件 SPI 方式驱动 #define IMU660RA_USE_SOFT_IIC (1) // 默认使用硬件 SPI 方式驱动
#if IMU660RA_USE_SOFT_IIC // 这两段 颜色正常的才是正确的 颜色灰的就是没有用的 #if IMU660RA_USE_SOFT_IIC // 这两段 颜色正常的才是正确的 颜色灰的就是没有用的
//====================================================软件 IIC 驱动==================================================== //====================================================软件 IIC 驱动====================================================
#define IMU660RA_SOFT_IIC_DELAY (10 ) // 软件 IIC 的时钟延时周期 数值越小 IIC 通信速率越快 #define IMU660RA_SOFT_IIC_DELAY (10) // 软件 IIC 的时钟延时周期 数值越小 IIC 通信速率越快
#define IMU660RA_SCL_PIN (B13) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚 #define IMU660RA_SCL_PIN (B3) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚
#define IMU660RA_SDA_PIN (B15) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚 #define IMU660RA_SDA_PIN (B5) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚
//====================================================软件 IIC 驱动==================================================== //====================================================软件 IIC 驱动====================================================
#else #else
//====================================================硬件 SPI 驱动==================================================== //====================================================硬件 SPI 驱动====================================================
#define IMU660RA_SPI_SPEED (10*1000*1000) // 硬件 SPI 速率 #define IMU660RA_SPI_SPEED (10 * 1000 * 1000) // 硬件 SPI 速率
#define IMU660RA_SPI SPI_3 // 硬件 SPI 号 #define IMU660RA_SPI SPI_3 // 硬件 SPI 号
#define IMU660RA_SPC_PIN SPI3_MAP0_SCK_B3 // 硬件 SPI SCK 引脚 #define IMU660RA_SPC_PIN SPI3_MAP0_SCK_B3 // 硬件 SPI SCK 引脚
#define IMU660RA_SDI_PIN SPI3_MAP0_MOSI_B5 // 硬件 SPI MOSI 引脚 #define IMU660RA_SDI_PIN SPI3_MAP0_MOSI_B5 // 硬件 SPI MOSI 引脚
#define IMU660RA_SDO_PIN SPI3_MAP0_MISO_B4 // 硬件 SPI MISO 引脚 #define IMU660RA_SDO_PIN SPI3_MAP0_MISO_B4 // 硬件 SPI MISO 引脚
//====================================================硬件 SPI 驱动==================================================== //====================================================硬件 SPI 驱动====================================================
#endif #endif
#define IMU660RA_CS_PIN (C10) // CS 片选引脚 #define IMU660RA_CS_PIN (C10) // CS 片选引脚
#define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN))) #define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN)))
typedef enum typedef enum {
{ IMU660RA_ACC_SAMPLE_SGN_2G, // 加速度计量程 ±2G (ACC = Accelerometer 加速度计) (SGN = signum 带符号数 表示正负范围) (G = g 重力加速度 g≈9.80 m/s^2)
IMU660RA_ACC_SAMPLE_SGN_2G , // 加速度计量程 ±2G (ACC = Accelerometer 加速度计) (SGN = signum 带符号数 表示正负范围) (G = g 重力加速度 g≈9.80 m/s^2) IMU660RA_ACC_SAMPLE_SGN_4G, // 加速度计量程 ±4G (ACC = Accelerometer 加速度计) (SGN = signum 带符号数 表示正负范围) (G = g 重力加速度 g≈9.80 m/s^2)
IMU660RA_ACC_SAMPLE_SGN_4G , // 加速度计量程 ±4G (ACC = Accelerometer 加速度计) (SGN = signum 带符号数 表示正负范围) (G = g 重力加速度 g≈9.80 m/s^2) IMU660RA_ACC_SAMPLE_SGN_8G, // 加速度计量程 ±8G (ACC = Accelerometer 加速度计) (SGN = signum 带符号数 表示正负范围) (G = g 重力加速度 g≈9.80 m/s^2)
IMU660RA_ACC_SAMPLE_SGN_8G , // 加速度计量程 ±8G (ACC = Accelerometer 加速度计) (SGN = signum 带符号数 表示正负范围) (G = g 重力加速度 g≈9.80 m/s^2) IMU660RA_ACC_SAMPLE_SGN_16G, // 加速度计量程 ±16G (ACC = Accelerometer 加速度计) (SGN = signum 带符号数 表示正负范围) (G = g 重力加速度 g≈9.80 m/s^2)
IMU660RA_ACC_SAMPLE_SGN_16G, // 加速度计量程 ±16G (ACC = Accelerometer 加速度计) (SGN = signum 带符号数 表示正负范围) (G = g 重力加速度 g≈9.80 m/s^2) } imu660ra_acc_sample_config;
}imu660ra_acc_sample_config;
typedef enum typedef enum {
{ IMU660RA_GYRO_SAMPLE_SGN_125DPS, // 陀螺仪量程 ±125DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S)
IMU660RA_GYRO_SAMPLE_SGN_125DPS , // 陀螺仪量程 ±125DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S) IMU660RA_GYRO_SAMPLE_SGN_250DPS, // 陀螺仪量程 ±250DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S)
IMU660RA_GYRO_SAMPLE_SGN_250DPS , // 陀螺仪量程 ±250DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S) IMU660RA_GYRO_SAMPLE_SGN_500DPS, // 陀螺仪量程 ±500DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S)
IMU660RA_GYRO_SAMPLE_SGN_500DPS , // 陀螺仪量程 ±500DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S) IMU660RA_GYRO_SAMPLE_SGN_1000DPS, // 陀螺仪量程 ±1000DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S)
IMU660RA_GYRO_SAMPLE_SGN_1000DPS, // 陀螺仪量程 ±1000DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S) IMU660RA_GYRO_SAMPLE_SGN_2000DPS, // 陀螺仪量程 ±2000DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S)
IMU660RA_GYRO_SAMPLE_SGN_2000DPS, // 陀螺仪量程 ±2000DPS (GYRO = Gyroscope 陀螺仪) (SGN = signum 带符号数 表示正负范围) (DPS = Degree Per Second 角速度单位 °/S) } imu660ra_gyro_sample_config;
}imu660ra_gyro_sample_config;
#define IMU660RA_ACC_SAMPLE_DEFAULT ( IMU660RA_ACC_SAMPLE_SGN_8G ) // 在这设置默认的 加速度计 初始化量程 #define IMU660RA_ACC_SAMPLE_DEFAULT (IMU660RA_ACC_SAMPLE_SGN_8G) // 在这设置默认的 加速度计 初始化量程
#define IMU660RA_GYRO_SAMPLE_DEFAULT ( IMU660RA_GYRO_SAMPLE_SGN_2000DPS ) // 在这设置默认的 陀螺仪 初始化量程 #define IMU660RA_GYRO_SAMPLE_DEFAULT (IMU660RA_GYRO_SAMPLE_SGN_2000DPS) // 在这设置默认的 陀螺仪 初始化量程
#define IMU660RA_TIMEOUT_COUNT ( 0x00FF ) // IMU660RA 超时计数 #define IMU660RA_TIMEOUT_COUNT (0x00FF) // IMU660RA 超时计数
//================================================定义 IMU660RA 内部地址================================================ //================================================定义 IMU660RA 内部地址================================================
#define IMU660RA_DEV_ADDR ( 0x69 ) // SA0接地0x68 SA0上拉0x69 模块默认上拉 #define IMU660RA_DEV_ADDR (0x69) // SA0 接地0x68 SA0 上拉0x69 模块默认上拉
#define IMU660RA_SPI_W ( 0x00 ) #define IMU660RA_SPI_W (0x00)
#define IMU660RA_SPI_R ( 0x80 ) #define IMU660RA_SPI_R (0x80)
#define IMU660RA_CHIP_ID ( 0x00 ) #define IMU660RA_CHIP_ID (0x00)
#define IMU660RA_PWR_CONF ( 0x7C ) #define IMU660RA_PWR_CONF (0x7C)
#define IMU660RA_PWR_CTRL ( 0x7D ) #define IMU660RA_PWR_CTRL (0x7D)
#define IMU660RA_INIT_CTRL ( 0x59 ) #define IMU660RA_INIT_CTRL (0x59)
#define IMU660RA_INIT_DATA ( 0x5E ) #define IMU660RA_INIT_DATA (0x5E)
#define IMU660RA_INT_STA ( 0x21 ) #define IMU660RA_INT_STA (0x21)
#define IMU660RA_ACC_ADDRESS ( 0x0C ) #define IMU660RA_TEMP_ADDRESS (0x22)
#define IMU660RA_GYRO_ADDRESS ( 0x12 ) #define IMU660RA_ACC_ADDRESS (0x0C)
#define IMU660RA_ACC_CONF ( 0x40 ) #define IMU660RA_GYRO_ADDRESS (0x12)
#define IMU660RA_ACC_RANGE ( 0x41 ) #define IMU660RA_ACC_CONF (0x40)
#define IMU660RA_GYR_CONF ( 0x42 ) #define IMU660RA_ACC_RANGE (0x41)
#define IMU660RA_GYR_RANGE ( 0x43 ) #define IMU660RA_GYR_CONF (0x42)
#define IMU660RA_GYR_RANGE (0x43)
//================================================定义 IMU660RA 内部地址================================================ //================================================定义 IMU660RA 内部地址================================================
extern int16 imu660ra_gyro_x, imu660ra_gyro_y, imu660ra_gyro_z; // 三轴陀螺仪数据 gyro (陀螺仪) extern int16 imu660ra_gyro_x;
extern int16 imu660ra_acc_x, imu660ra_acc_y, imu660ra_acc_z; // 三轴加速度计数据 acc (accelerometer 加速度计) extern int16 imu660ra_gyro_y;
extern int16 imu660ra_gyro_z; // 三轴陀螺仪数据 gyro (陀螺仪)
extern int16 imu660ra_acc_x;
extern int16 imu660ra_acc_y;
extern int16 imu660ra_acc_z; // 三轴加速度计数据 acc (accelerometer 加速度计)
extern float imu660ra_temperature;
extern float imu660ra_transition_factor[2]; extern float imu660ra_transition_factor[2];
void imu660ra_get_acc (void); // 获取 IMU660RA 加速度计数据 void imu660ra_get_acc(void); // 获取 IMU660RA 加速度计数据
void imu660ra_get_gyro (void); // 获取 IMU660RA 陀螺仪数据 void imu660ra_get_gyro(void); // 获取 IMU660RA 陀螺仪数据
void imu660ra_get_temperature(void);
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
// 函数简介 将 IMU660RA 加速度计数据转换为实际物理数据 // 函数简介 将 IMU660RA 加速度计数据转换为实际物理数据
@@ -134,7 +139,7 @@ void imu660ra_get_gyro (void);
// 使用示例 float data = imu660ra_acc_transition(imu660ra_acc_x); // 单位为 g(m/s^2) // 使用示例 float data = imu660ra_acc_transition(imu660ra_acc_x); // 单位为 g(m/s^2)
// 备注信息 // 备注信息
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
#define imu660ra_acc_transition(acc_value) ((float)(acc_value) / imu660ra_transition_factor[0]) #define imu660ra_acc_transition(acc_value) ((float)(acc_value) / imu660ra_transition_factor[0])
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
// 函数简介 将 IMU660RA 陀螺仪数据转换为实际物理数据 // 函数简介 将 IMU660RA 陀螺仪数据转换为实际物理数据
@@ -143,9 +148,8 @@ void imu660ra_get_gyro (void);
// 使用示例 float data = imu660ra_gyro_transition(imu660ra_gyro_x); // 单位为 °/s // 使用示例 float data = imu660ra_gyro_transition(imu660ra_gyro_x); // 单位为 °/s
// 备注信息 // 备注信息
//------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------
#define imu660ra_gyro_transition(gyro_value) ((float)(gyro_value) / imu660ra_transition_factor[1]) #define imu660ra_gyro_transition(gyro_value) ((float)(gyro_value) / imu660ra_transition_factor[1])
uint8 imu660ra_init (void); // 初始化 IMU660RA uint8 imu660ra_init(void); // 初始化 IMU660RA
#endif #endif