From ece70343e5856d1ff9b4e4311c381a0a89201fb3 Mon Sep 17 00:00:00 2001 From: bmy <2583236812@qq.com> Date: Wed, 13 Dec 2023 21:54:20 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E5=99=A8=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/by_peripheral_init.c | 20 +++ app/by_peripheral_init.h | 15 ++ app/isr.c | 334 ++++++++++++++++----------------------- app/main.c | 13 +- 4 files changed, 179 insertions(+), 203 deletions(-) create mode 100644 app/by_peripheral_init.c create mode 100644 app/by_peripheral_init.h diff --git a/app/by_peripheral_init.c b/app/by_peripheral_init.c new file mode 100644 index 0000000..c44f301 --- /dev/null +++ b/app/by_peripheral_init.c @@ -0,0 +1,20 @@ +#include "by_peripheral_init.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; +} \ No newline at end of file diff --git a/app/by_peripheral_init.h b/app/by_peripheral_init.h new file mode 100644 index 0000000..7e19940 --- /dev/null +++ b/app/by_peripheral_init.h @@ -0,0 +1,15 @@ +#ifndef _BY_PERIPHERAL_INIT_H__ +#define _BY_PERIPHERAL_INIT_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); + +#endif \ No newline at end of file diff --git a/app/isr.c b/app/isr.c index 210feae..af20fec 100644 --- a/app/isr.c +++ b/app/isr.c @@ -1,73 +1,75 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library 即(CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库 -* Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是CH32V307VCT6 开源库的一部分 -* -* CH32V307VCT6 开源库 是免费软件 -* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 -* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* -* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 -* 甚至没有隐含的适销性或适合特定用途的保证 -* 更多细节请参见 GPL -* -* 您应该在收到本开源库的同时收到一份 GPL 的副本 -* 如果没有,请参阅 -* -* 额外注明: -* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 -* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 -* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 -* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) -* -* 文件名称 isr -* 公司名称 成都逐飞科技有限公司 -* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 MounRiver Studio V1.8.1 -* 适用平台 CH32V307VCT6 -* 店铺链接 https://seekfree.taobao.com/ -* -* 修改记录 -* 日期 作者 备注 -* 2022-09-15 大W first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library 即(CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库 + * Copyright (c) 2022 SEEKFREE 逐飞科技 + * + * 本文件是CH32V307VCT6 开源库的一部分 + * + * CH32V307VCT6 开源库 是免费软件 + * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 + * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 + * + * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 + * 甚至没有隐含的适销性或适合特定用途的保证 + * 更多细节请参见 GPL + * + * 您应该在收到本开源库的同时收到一份 GPL 的副本 + * 如果没有,请参阅 + * + * 额外注明: + * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 + * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 + * 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 + * 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) + * + * 文件名称 isr + * 公司名称 成都逐飞科技有限公司 + * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 + * 开发环境 MounRiver Studio V1.8.1 + * 适用平台 CH32V307VCT6 + * 店铺链接 https://seekfree.taobao.com/ + * + * 修改记录 + * 日期 作者 备注 + * 2022-09-15 大W first version + ********************************************************************************************************************/ #include "zf_common_headfile.h" -void NMI_Handler(void) __attribute__((interrupt())); +#include "by_peripheral_init.h" + +void NMI_Handler(void) __attribute__((interrupt())); void HardFault_Handler(void) __attribute__((interrupt())); void USART1_IRQHandler(void) __attribute__((interrupt())); void USART2_IRQHandler(void) __attribute__((interrupt())); void USART3_IRQHandler(void) __attribute__((interrupt())); -void UART4_IRQHandler (void) __attribute__((interrupt())); -void UART5_IRQHandler (void) __attribute__((interrupt())); -void UART6_IRQHandler (void) __attribute__((interrupt())); -void UART7_IRQHandler (void) __attribute__((interrupt())); -void UART8_IRQHandler (void) __attribute__((interrupt())); -void DVP_IRQHandler (void) __attribute__((interrupt())); -//void TIM1_BRK_IRQHandler (void) __attribute__((interrupt())); -void TIM1_UP_IRQHandler (void) __attribute__((interrupt())); -//void TIM1_TRG_COM_IRQHandler (void) __attribute__((interrupt())); -//void TIM1_CC_IRQHandler (void) __attribute__((interrupt())); -void TIM2_IRQHandler (void) __attribute__((interrupt())); -void TIM3_IRQHandler (void) __attribute__((interrupt())); -void TIM4_IRQHandler (void) __attribute__((interrupt())); -void TIM5_IRQHandler (void) __attribute__((interrupt())); -void TIM6_IRQHandler (void) __attribute__((interrupt())); -void TIM7_IRQHandler (void) __attribute__((interrupt())); -//void TIM8_BRK_IRQHandler (void) __attribute__((interrupt())); -void TIM8_UP_IRQHandler (void) __attribute__((interrupt())); -//void TIM8_TRG_COM_IRQHandler (void) __attribute__((interrupt())); -//void TIM8_CC_IRQHandler (void) __attribute__((interrupt())); -//void TIM9_BRK_IRQHandler (void) __attribute__((interrupt())); -void TIM9_UP_IRQHandler (void) __attribute__((interrupt())); -//void TIM9_TRG_COM_IRQHandler (void) __attribute__((interrupt())); -//void TIM9_CC_IRQHandler (void) __attribute__((interrupt())); -//void TIM10_BRK_IRQHandler (void) __attribute__((interrupt())); -void TIM10_UP_IRQHandler (void) __attribute__((interrupt())); -//void TIM10_TRG_COM_IRQHandler (void) __attribute__((interrupt())); -//void TIM10_CC_IRQHandler (void) __attribute__((interrupt())); +void UART4_IRQHandler(void) __attribute__((interrupt())); +void UART5_IRQHandler(void) __attribute__((interrupt())); +void UART6_IRQHandler(void) __attribute__((interrupt())); +void UART7_IRQHandler(void) __attribute__((interrupt())); +void UART8_IRQHandler(void) __attribute__((interrupt())); +void DVP_IRQHandler(void) __attribute__((interrupt())); +// void TIM1_BRK_IRQHandler (void) __attribute__((interrupt())); +void TIM1_UP_IRQHandler(void) __attribute__((interrupt())); +// void TIM1_TRG_COM_IRQHandler (void) __attribute__((interrupt())); +// void TIM1_CC_IRQHandler (void) __attribute__((interrupt())); +void TIM2_IRQHandler(void) __attribute__((interrupt())); +void TIM3_IRQHandler(void) __attribute__((interrupt())); +void TIM4_IRQHandler(void) __attribute__((interrupt())); +void TIM5_IRQHandler(void) __attribute__((interrupt())); +void TIM6_IRQHandler(void) __attribute__((interrupt())); +void TIM7_IRQHandler(void) __attribute__((interrupt())); +// void TIM8_BRK_IRQHandler (void) __attribute__((interrupt())); +void TIM8_UP_IRQHandler(void) __attribute__((interrupt())); +// void TIM8_TRG_COM_IRQHandler (void) __attribute__((interrupt())); +// void TIM8_CC_IRQHandler (void) __attribute__((interrupt())); +// void TIM9_BRK_IRQHandler (void) __attribute__((interrupt())); +void TIM9_UP_IRQHandler(void) __attribute__((interrupt())); +// void TIM9_TRG_COM_IRQHandler (void) __attribute__((interrupt())); +// void TIM9_CC_IRQHandler (void) __attribute__((interrupt())); +// void TIM10_BRK_IRQHandler (void) __attribute__((interrupt())); +void TIM10_UP_IRQHandler(void) __attribute__((interrupt())); +// void TIM10_TRG_COM_IRQHandler (void) __attribute__((interrupt())); +// void TIM10_CC_IRQHandler (void) __attribute__((interrupt())); void EXTI0_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) { - if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) - { + if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); } } 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); } } void USART3_IRQHandler(void) { - if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) - { -#if DEBUG_UART_USE_INTERRUPT // 如果开启 debug 串口中断 - debug_interrupr_handler(); // 调用 debug 串口接收处理函数 数据会被 debug 环形缓冲区读取 -#endif // 如果修改了 DEBUG_UART_INDEX 那这段代码需要放到对应的串口中断去 + if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) { +#if DEBUG_UART_USE_INTERRUPT // 如果开启 debug 串口中断 + debug_interrupr_handler(); // 调用 debug 串口接收处理函数 数据会被 debug 环形缓冲区读取 +#endif // 如果修改了 DEBUG_UART_INDEX 那这段代码需要放到对应的串口中断去 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); } } -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(); 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); } } -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(); 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(); USART_ClearITPendingBit(UART8, USART_IT_RXNE); } - } - - void DVP_IRQHandler(void) { - if (DVP->IFR & RB_DVP_IF_FRM_DONE) - { + if (DVP->IFR & RB_DVP_IF_FRM_DONE) { camera_dvp_handler(); DVP->IFR &= ~RB_DVP_IF_FRM_DONE; } } void EXTI0_IRQHandler(void) { - if(SET == EXTI_GetITStatus(EXTI_Line0)) - { + if (SET == EXTI_GetITStatus(EXTI_Line0)) { EXTI_ClearITPendingBit(EXTI_Line0); - } } void EXTI1_IRQHandler(void) { - if(SET == EXTI_GetITStatus(EXTI_Line1)) - { + if (SET == EXTI_GetITStatus(EXTI_Line1)) { EXTI_ClearITPendingBit(EXTI_Line1); - } } void EXTI2_IRQHandler(void) { - if(SET == EXTI_GetITStatus(EXTI_Line2)) - { + if (SET == EXTI_GetITStatus(EXTI_Line2)) { EXTI_ClearITPendingBit(EXTI_Line2); - } } void EXTI3_IRQHandler(void) { - if(SET == EXTI_GetITStatus(EXTI_Line3)) - { + if (SET == EXTI_GetITStatus(EXTI_Line3)) { EXTI_ClearITPendingBit(EXTI_Line3); - } } void EXTI4_IRQHandler(void) { - if(SET == EXTI_GetITStatus(EXTI_Line4)) - { + if (SET == EXTI_GetITStatus(EXTI_Line4)) { EXTI_ClearITPendingBit(EXTI_Line4); - } } void EXTI9_5_IRQHandler(void) { - if(SET == EXTI_GetITStatus(EXTI_Line5)) - { + if (SET == EXTI_GetITStatus(EXTI_Line5)) { EXTI_ClearITPendingBit(EXTI_Line5); - } - if(SET == EXTI_GetITStatus(EXTI_Line6)) - { + if (SET == EXTI_GetITStatus(EXTI_Line6)) { EXTI_ClearITPendingBit(EXTI_Line6); - } - if(SET == EXTI_GetITStatus(EXTI_Line7)) - { + if (SET == EXTI_GetITStatus(EXTI_Line7)) { EXTI_ClearITPendingBit(EXTI_Line7); - } - if(SET == EXTI_GetITStatus(EXTI_Line8)) - { + if (SET == EXTI_GetITStatus(EXTI_Line8)) { EXTI_ClearITPendingBit(EXTI_Line8); - } - if(SET == EXTI_GetITStatus(EXTI_Line9)) - { + if (SET == EXTI_GetITStatus(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) { - if(SET == EXTI_GetITStatus(EXTI_Line10)) - { + if (SET == EXTI_GetITStatus(EXTI_Line10)) { // 此处编写用户代码 (A10/B10..E10) 引脚触发 @@ -242,18 +216,18 @@ void EXTI15_10_IRQHandler(void) EXTI_ClearITPendingBit(EXTI_Line10); } - if(SET == EXTI_GetITStatus(EXTI_Line11)) - { + if (SET == EXTI_GetITStatus(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); - } - if(SET == EXTI_GetITStatus(EXTI_Line13)) - { + if (SET == EXTI_GetITStatus(EXTI_Line13)) { // -----------------* ToF INT 更新中断 预置中断处理函数 *----------------- tof_module_exti_handler(); // -----------------* ToF INT 更新中断 预置中断处理函数 *----------------- @@ -262,17 +236,14 @@ void EXTI15_10_IRQHandler(void) // 此处编写用户代码 (A13/B13..E13) 引脚触发 EXTI_ClearITPendingBit(EXTI_Line13); - } - if(SET == EXTI_GetITStatus(EXTI_Line14)) - { + if (SET == EXTI_GetITStatus(EXTI_Line14)) { // -----------------* DM1XA 光信号 预置中断处理函数 *----------------- dm1xa_light_callback(); // -----------------* DM1XA 光信号 预置中断处理函数 *----------------- EXTI_ClearITPendingBit(EXTI_Line14); } - if(SET == EXTI_GetITStatus(EXTI_Line15)) - { + if (SET == EXTI_GetITStatus(EXTI_Line15)) { // -----------------* DM1XA 声/反馈信号 预置中断处理函数 *----------------- dm1xa_sound_callback(); // -----------------* DM1XA 声/反馈信号 预置中断处理函数 *----------------- @@ -280,108 +251,76 @@ void EXTI15_10_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); - } } - void TIM2_IRQHandler(void) { - if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) - { - TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); - - + if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { + TIM_ClearITPendingBit(TIM2, TIM_IT_Update); } } void TIM3_IRQHandler(void) { - if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) - { - TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); - - + if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { + TIM_ClearITPendingBit(TIM3, TIM_IT_Update); } } void TIM4_IRQHandler(void) { - if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) - { - TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); - - + if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) { + TIM_ClearITPendingBit(TIM4, TIM_IT_Update); } } void TIM5_IRQHandler(void) { - if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) - { - TIM_ClearITPendingBit(TIM5, TIM_IT_Update ); - - + if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) { + TIM_ClearITPendingBit(TIM5, TIM_IT_Update); } } void TIM6_IRQHandler(void) { - if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) - { - TIM_ClearITPendingBit(TIM6, TIM_IT_Update ); - + if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) { + TIM_ClearITPendingBit(TIM6, TIM_IT_Update); } } void TIM7_IRQHandler(void) { - if(TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET) - { - TIM_ClearITPendingBit(TIM7, TIM_IT_Update ); - - + if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET) { + TIM_ClearITPendingBit(TIM7, TIM_IT_Update); } } - 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); - } } - 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); - } } - 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); - } } - - //.section .text.vector_handler, "ax", @progbits // .weak EXTI0_IRQHandler /* EXTI Line 0 */ @@ -468,26 +407,23 @@ void TIM10_UP_IRQHandler(void) // .weak DMA2_Channel11_IRQHandler /* DMA2 Channel 11 */ /******************************************************************************* -* Function Name : NMI_Handler -* Description : This function handles NMI exception. -* Input : None -* Return : None -*******************************************************************************/ + * Function Name : NMI_Handler + * Description : This function handles NMI exception. + * Input : None + * Return : None + *******************************************************************************/ void NMI_Handler(void) { } /******************************************************************************* -* Function Name : HardFault_Handler -* Description : This function handles Hard Fault exception. -* Input : None -* Return : None -*******************************************************************************/ + * Function Name : HardFault_Handler + * Description : This function handles Hard Fault exception. + * Input : None + * Return : None + *******************************************************************************/ void HardFault_Handler(void) { - while (1) - { - } + while (1) { + } } - - diff --git a/app/main.c b/app/main.c index d71eb23..b620c6c 100644 --- a/app/main.c +++ b/app/main.c @@ -33,6 +33,7 @@ * 2022-09-15 大W first version ********************************************************************************************************************/ #include "zf_common_headfile.h" +#include "by_peripheral_init.h" int main (void) @@ -42,15 +43,19 @@ int main (void) // 此处编写用户代码 例如外设初始化代码等 ips114_init(); - mt9v03x_init(); + by_gpio_init(); + by_exit_init(); + // mt9v03x_init(); // 此处编写用户代码 例如外设初始化代码等 while(1) { // 此处编写需要循环执行的代码 - if(mt9v03x_finish_flag){ - ips114_show_gray_image(0, 0, mt9v03x_image[0], 188, 120, 188, 120,0); - } + // if(mt9v03x_finish_flag){ + // ips114_show_gray_image(0, 0, mt9v03x_image[0], 188, 120, 188, 120,0); + // } + printf("%d\r\n",by_get_pb_statu()); + system_delay_ms(100); // 此处编写需要循环执行的代码 } } From d2d40d225cca5c9f931499bd35f934c20654cda8 Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Thu, 14 Dec 2023 21:18:55 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0IMU660RA=E7=A1=AC?= =?UTF-8?q?=E4=BB=B6=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/zf_device/zf_device_imu660ra.c | 280 +++++++++++------------ libraries/zf_device/zf_device_imu660ra.h | 216 ++++++++--------- 2 files changed, 247 insertions(+), 249 deletions(-) diff --git a/libraries/zf_device/zf_device_imu660ra.c b/libraries/zf_device/zf_device_imu660ra.c index 6fdf9f1..15eb24c 100644 --- a/libraries/zf_device/zf_device_imu660ra.c +++ b/libraries/zf_device/zf_device_imu660ra.c @@ -1,58 +1,58 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library 鍗筹紙CH32V307VCT6 寮婧愬簱锛夋槸涓涓熀浜庡畼鏂 SDK 鎺ュ彛鐨勭涓夋柟寮婧愬簱 -* Copyright (c) 2022 SEEKFREE 閫愰绉戞妧 -* -* 鏈枃浠舵槸CH32V307VCT6 寮婧愬簱鐨勪竴閮ㄥ垎 -* -* CH32V307VCT6 寮婧愬簱 鏄厤璐硅蒋浠 -* 鎮ㄥ彲浠ユ牴鎹嚜鐢辫蒋浠跺熀閲戜細鍙戝竷鐨 GPL锛圙NU General Public License锛屽嵆 GNU閫氱敤鍏叡璁稿彲璇侊級鐨勬潯娆 -* 鍗 GPL 鐨勭3鐗堬紙鍗 GPL3.0锛夋垨锛堟偍閫夋嫨鐨勶級浠讳綍鍚庢潵鐨勭増鏈紝閲嶆柊鍙戝竷鍜/鎴栦慨鏀瑰畠 -* -* 鏈紑婧愬簱鐨勫彂甯冩槸甯屾湜瀹冭兘鍙戞尌浣滅敤锛屼絾骞舵湭瀵瑰叾浣滀换浣曠殑淇濊瘉 -* 鐢氳嚦娌℃湁闅愬惈鐨勯傞攢鎬ф垨閫傚悎鐗瑰畾鐢ㄩ旂殑淇濊瘉 -* 鏇村缁嗚妭璇峰弬瑙 GPL -* -* 鎮ㄥ簲璇ュ湪鏀跺埌鏈紑婧愬簱鐨勫悓鏃舵敹鍒颁竴浠 GPL 鐨勫壇鏈 -* 濡傛灉娌℃湁锛岃鍙傞槄 -* -* 棰濆娉ㄦ槑锛 -* 鏈紑婧愬簱浣跨敤 GPL3.0 寮婧愯鍙瘉鍗忚 浠ヤ笂璁稿彲鐢虫槑涓鸿瘧鏂囩増鏈 -* 璁稿彲鐢虫槑鑻辨枃鐗堝湪 libraries/doc 鏂囦欢澶逛笅鐨 GPL3_permission_statement.txt 鏂囦欢涓 -* 璁稿彲璇佸壇鏈湪 libraries 鏂囦欢澶逛笅 鍗宠鏂囦欢澶逛笅鐨 LICENSE 鏂囦欢 -* 娆㈣繋鍚勪綅浣跨敤骞朵紶鎾湰绋嬪簭 浣嗕慨鏀瑰唴瀹规椂蹇呴』淇濈暀閫愰绉戞妧鐨勭増鏉冨0鏄庯紙鍗虫湰澹版槑锛 -* -* 鏂囦欢鍚嶇О zf_device_imu660ra -* 鍏徃鍚嶇О 鎴愰兘閫愰绉戞妧鏈夐檺鍏徃 -* 鐗堟湰淇℃伅 鏌ョ湅 libraries/doc 鏂囦欢澶瑰唴 version 鏂囦欢 鐗堟湰璇存槑 -* 寮鍙戠幆澧 MounRiver Studio V1.8.1 -* 閫傜敤骞冲彴 CH32V307VCT6 -* 搴楅摵閾炬帴 https://seekfree.taobao.com/ -* -* 淇敼璁板綍 -* 鏃ユ湡 浣滆 澶囨敞 -* 2022-09-15 澶 first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library 鍗筹紙CH32V307VCT6 寮婧愬簱锛夋槸涓涓熀浜庡畼鏂 SDK 鎺ュ彛鐨勭涓夋柟寮婧愬簱 + * Copyright (c) 2022 SEEKFREE 閫愰绉戞妧 + * + * 鏈枃浠舵槸 CH32V307VCT6 寮婧愬簱鐨勪竴閮ㄥ垎 + * + * CH32V307VCT6 寮婧愬簱 鏄厤璐硅蒋浠 + * 鎮ㄥ彲浠ユ牴鎹嚜鐢辫蒋浠跺熀閲戜細鍙戝竷鐨 GPL锛圙NU General Public License锛屽嵆 GNU 閫氱敤鍏叡璁稿彲璇侊級鐨勬潯娆 + * 鍗 GPL 鐨勭 3 鐗堬紙鍗 GPL3.0锛夋垨锛堟偍閫夋嫨鐨勶級浠讳綍鍚庢潵鐨勭増鏈紝閲嶆柊鍙戝竷鍜/鎴栦慨鏀瑰畠 + * + * 鏈紑婧愬簱鐨勫彂甯冩槸甯屾湜瀹冭兘鍙戞尌浣滅敤锛屼絾骞舵湭瀵瑰叾浣滀换浣曠殑淇濊瘉 + * 鐢氳嚦娌℃湁闅愬惈鐨勯傞攢鎬ф垨閫傚悎鐗瑰畾鐢ㄩ旂殑淇濊瘉 + * 鏇村缁嗚妭璇峰弬瑙 GPL + * + * 鎮ㄥ簲璇ュ湪鏀跺埌鏈紑婧愬簱鐨勫悓鏃舵敹鍒颁竴浠 GPL 鐨勫壇鏈 + * 濡傛灉娌℃湁锛岃鍙傞槄 + * + * 棰濆娉ㄦ槑锛 + * 鏈紑婧愬簱浣跨敤 GPL3.0 寮婧愯鍙瘉鍗忚 浠ヤ笂璁稿彲鐢虫槑涓鸿瘧鏂囩増鏈 + * 璁稿彲鐢虫槑鑻辨枃鐗堝湪 libraries/doc 鏂囦欢澶逛笅鐨 GPL3_permission_statement.txt 鏂囦欢涓 + * 璁稿彲璇佸壇鏈湪 libraries 鏂囦欢澶逛笅 鍗宠鏂囦欢澶逛笅鐨 LICENSE 鏂囦欢 + * 娆㈣繋鍚勪綅浣跨敤骞朵紶鎾湰绋嬪簭 浣嗕慨鏀瑰唴瀹规椂蹇呴』淇濈暀閫愰绉戞妧鐨勭増鏉冨0鏄庯紙鍗虫湰澹版槑锛 + * + * 鏂囦欢鍚嶇О zf_device_imu660ra + * 鍏徃鍚嶇О 鎴愰兘閫愰绉戞妧鏈夐檺鍏徃 + * 鐗堟湰淇℃伅 鏌ョ湅 libraries/doc 鏂囦欢澶瑰唴 version 鏂囦欢 鐗堟湰璇存槑 + * 寮鍙戠幆澧 MounRiver Studio V1.8.1 + * 閫傜敤骞冲彴 CH32V307VCT6 + * 搴楅摵閾炬帴 https://seekfree.taobao.com/ + * + * 淇敼璁板綍 + * 鏃ユ湡 浣滆 澶囨敞 + * 2022-09-15 澶 W first version + ********************************************************************************************************************/ /********************************************************************************************************************* -* 鎺ョ嚎瀹氫箟锛 -* ------------------------------------ -* 妯″潡绠¤剼 鍗曠墖鏈虹鑴 -* // 纭欢 SPI 寮曡剼 -* SCL/SPC 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SPC_PIN 瀹忓畾涔 -* SDA/DSI 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDI_PIN 瀹忓畾涔 -* SA0/SDO 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDO_PIN 瀹忓畾涔 -* CS 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_CS_PIN 瀹忓畾涔 -* VCC 3.3V鐢垫簮 -* GND 鐢垫簮鍦 -* 鍏朵綑寮曡剼鎮┖ -* -* // 杞欢 IIC 寮曡剼 -* SCL/SPC 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SCL_PIN 瀹忓畾涔 -* SDA/DSI 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDA_PIN 瀹忓畾涔 -* VCC 3.3V鐢垫簮 -* GND 鐢垫簮鍦 -* 鍏朵綑寮曡剼鎮┖ -* ------------------------------------ -********************************************************************************************************************/ + * 鎺ョ嚎瀹氫箟锛 + * ------------------------------------ + * 妯″潡绠¤剼 鍗曠墖鏈虹鑴 + * // 纭欢 SPI 寮曡剼 + * SCL/SPC 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SPC_PIN 瀹忓畾涔 + * SDA/DSI 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDI_PIN 瀹忓畾涔 + * SA0/SDO 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDO_PIN 瀹忓畾涔 + * CS 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_CS_PIN 瀹忓畾涔 + * VCC 3.3V 鐢垫簮 + * GND 鐢垫簮鍦 + * 鍏朵綑寮曡剼鎮┖ + * + * // 杞欢 IIC 寮曡剼 + * SCL/SPC 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SCL_PIN 瀹忓畾涔 + * SDA/DSI 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDA_PIN 瀹忓畾涔 + * VCC 3.3V 鐢垫簮 + * GND 鐢垫簮鍦 + * 鍏朵綑寮曡剼鎮┖ + * ------------------------------------ + ********************************************************************************************************************/ #include "zf_common_debug.h" #include "zf_driver_delay.h" @@ -63,17 +63,22 @@ #include "zf_device_imu660ra.h" -int16 imu660ra_gyro_x = 0, imu660ra_gyro_y = 0, imu660ra_gyro_z = 0; // 涓夎酱闄铻轰华鏁版嵁 gyro (闄铻轰华) -int16 imu660ra_acc_x = 0, imu660ra_acc_y = 0, imu660ra_acc_z = 0; // 涓夎酱鍔犻熷害璁℃暟鎹 acc (accelerometer 鍔犻熷害璁) -float imu660ra_transition_factor[2] = {4096, 16.4}; +int16 imu660ra_gyro_x = 0; +int16 imu660ra_gyro_y = 0; +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 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_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_registers(reg, data, len) (soft_iic_read_8bit_registers(&imu660ra_iic_struct, (reg), (data), (len))) +#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_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))) #else //------------------------------------------------------------------------------------------------------------------- // 鍑芥暟绠浠 IMU660RA 鍐欏瘎瀛樺櫒 @@ -136,9 +141,8 @@ static void imu660ra_read_registers(uint8 reg, uint8 *data, uint32 len) IMU660RA_CS(0); spi_read_8bit_registers(IMU660RA_SPI, reg | IMU660RA_SPI_R, temp_data, len + 1); IMU660RA_CS(1); - for(int i = 0; i < len; i ++) - { - *(data ++) = temp_data[i + 1]; + for (int i = 0; i < len; i++) { + *(data++) = temp_data[i + 1]; } } #endif @@ -150,20 +154,19 @@ static void imu660ra_read_registers(uint8 reg, uint8 *data, uint32 len) // 浣跨敤绀轰緥 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; - do - { - if(timeout_count ++ > IMU660RA_TIMEOUT_COUNT) - { - return_state = 1; + do { + if (timeout_count++ > IMU660RA_TIMEOUT_COUNT) { + return_state = 1; break; } dat = imu660ra_read_register(IMU660RA_CHIP_ID); system_delay_ms(1); - }while(0x24 != dat); // 璇诲彇璁惧ID鏄惁绛変簬0X24锛屽鏋滀笉鏄0X24鍒欒涓烘病妫娴嬪埌璁惧 + } while (0x24 != dat); // 璇诲彇璁惧 ID 鏄惁绛変簬 0X24锛屽鏋滀笉鏄 0X24 鍒欒涓烘病妫娴嬪埌璁惧 return return_state; } @@ -172,34 +175,42 @@ static uint8 imu660ra_self_check (void) // 鍙傛暟璇存槑 void // 杩斿洖鍙傛暟 void // 浣跨敤绀轰緥 imu660ra_get_acc(); // 鎵ц璇ュ嚱鏁板悗锛岀洿鎺ユ煡鐪嬪搴旂殑鍙橀噺鍗冲彲 -// 澶囨敞淇℃伅 浣跨敤 SPI 鐨勯噰闆嗘椂闂翠负69us -// 浣跨敤 IIC 鐨勯噰闆嗘椂闂翠负126us 閲囬泦鍔犻熷害璁$殑鏃堕棿涓庨噰闆嗛檧铻轰华鐨勬椂闂翠竴鑷寸殑鍘熷洜鏄兘鍙槸璇诲彇瀵勫瓨鍣ㄦ暟鎹 +// 澶囨敞淇℃伅 浣跨敤 SPI 鐨勯噰闆嗘椂闂翠负 69us +// 浣跨敤 IIC 鐨勯噰闆嗘椂闂翠负 126us 閲囬泦鍔犻熷害璁$殑鏃堕棿涓庨噰闆嗛檧铻轰华鐨勬椂闂翠竴鑷寸殑鍘熷洜鏄兘鍙槸璇诲彇瀵勫瓨鍣ㄦ暟鎹 //------------------------------------------------------------------------------------------------------------------- -void imu660ra_get_acc (void) +void imu660ra_get_acc(void) { uint8 dat[6]; imu660ra_read_registers(IMU660RA_ACC_ADDRESS, dat, 6); - imu660ra_acc_x = (int16)(((uint16)dat[1]<<8 | dat[0])); - imu660ra_acc_y = (int16)(((uint16)dat[3]<<8 | dat[2])); - imu660ra_acc_z = (int16)(((uint16)dat[5]<<8 | dat[4])); + imu660ra_acc_x = (int16)(((uint16)dat[1] << 8 | dat[0])); + imu660ra_acc_y = (int16)(((uint16)dat[3] << 8 | dat[2])); + imu660ra_acc_z = (int16)(((uint16)dat[5] << 8 | dat[4])); } //------------------------------------------------------------------------------------------------------------------- // 鍑芥暟绠浠 鑾峰彇 IMU660RA 闄铻轰华鏁版嵁 // 鍙傛暟璇存槑 void // 杩斿洖鍙傛暟 void // 浣跨敤绀轰緥 imu660ra_get_gyro(); // 鎵ц璇ュ嚱鏁板悗锛岀洿鎺ユ煡鐪嬪搴旂殑鍙橀噺鍗冲彲 -// 澶囨敞淇℃伅 浣跨敤 SPI 鐨勯噰闆嗘椂闂翠负69us -// 浣跨敤 IIC 鐨勯噰闆嗘椂闂翠负126us +// 澶囨敞淇℃伅 浣跨敤 SPI 鐨勯噰闆嗘椂闂翠负 69us +// 浣跨敤 IIC 鐨勯噰闆嗘椂闂翠负 126us //------------------------------------------------------------------------------------------------------------------- -void imu660ra_get_gyro (void) +void imu660ra_get_gyro(void) { uint8 dat[6]; imu660ra_read_registers(IMU660RA_GYRO_ADDRESS, dat, 6); - imu660ra_gyro_x = (int16)(((uint16)dat[1]<<8 | dat[0])); - imu660ra_gyro_y = (int16)(((uint16)dat[3]<<8 | dat[2])); - imu660ra_gyro_z = (int16)(((uint16)dat[5]<<8 | dat[4])); + imu660ra_gyro_x = (int16)(((uint16)dat[1] << 8 | dat[0])); + imu660ra_gyro_y = (int16)(((uint16)dat[3] << 8 | dat[2])); + 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(); // 澶囨敞淇℃伅 //------------------------------------------------------------------------------------------------------------------- -uint8 imu660ra_init (void) +uint8 imu660ra_init(void) { uint8 return_state = 0; - system_delay_ms(20); // 绛夊緟璁惧涓婄數鎴愬姛 + system_delay_ms(20); // 绛夊緟璁惧涓婄數鎴愬姛 #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 - 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 鐨凜S绔彛 - imu660ra_read_register(IMU660RA_CHIP_ID); // 璇诲彇涓涓嬭澶嘔D 灏嗚澶囪缃负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 绔彛 + imu660ra_read_register(IMU660RA_CHIP_ID); // 璇诲彇涓涓嬭澶 ID 灏嗚澶囪缃负 SPI 妯″紡 #endif - do{ - if(imu660ra_self_check()) // IMU660RA 鑷 + do { + if (imu660ra_self_check()) // IMU660RA 鑷 { // 濡傛灉绋嬪簭鍦ㄨ緭鍑轰簡鏂█淇℃伅 骞朵笖鎻愮ず鍑洪敊浣嶇疆鍦ㄨ繖閲 // 閭d箞灏辨槸 IMU660RA 鑷鍑洪敊骞惰秴鏃堕鍑轰簡 @@ -231,13 +242,13 @@ uint8 imu660ra_init (void) return_state = 1; break; } - imu660ra_write_register(IMU660RA_PWR_CONF, 0x00); // 鍏抽棴楂樼骇鐪佺數妯″紡 + imu660ra_write_register(IMU660RA_PWR_CONF, 0x00); // 鍏抽棴楂樼骇鐪佺數妯″紡 system_delay_ms(1); - imu660ra_write_register(IMU660RA_INIT_CTRL, 0x00); // 寮濮嬪妯″潡杩涜鍒濆鍖栭厤缃 - 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, 0x00); // 寮濮嬪妯″潡杩涜鍒濆鍖栭厤缃 + imu660ra_write_registers(IMU660RA_INIT_DATA, imu660ra_config_file, sizeof(imu660ra_config_file)); // 杈撳嚭閰嶇疆鏂囦欢 + imu660ra_write_register(IMU660RA_INIT_CTRL, 0x01); // 鍒濆鍖栭厤缃粨鏉 system_delay_ms(20); - if(1 != imu660ra_read_register(IMU660RA_INT_STA)) // 妫鏌ユ槸鍚﹂厤缃畬鎴 + if (1 != imu660ra_read_register(IMU660RA_INT_STA)) // 妫鏌ユ槸鍚﹂厤缃畬鎴 { // 濡傛灉绋嬪簭鍦ㄨ緭鍑轰簡鏂█淇℃伅 骞朵笖鎻愮ず鍑洪敊浣嶇疆鍦ㄨ繖閲 // 閭d箞灏辨槸 IMU660RA 閰嶇疆鍒濆鍖栨枃浠跺嚭閿欎簡 @@ -246,45 +257,38 @@ uint8 imu660ra_init (void) return_state = 1; break; } - imu660ra_write_register(IMU660RA_PWR_CTRL, 0x0E); // 寮鍚ц兘妯″紡 浣胯兘闄铻轰华銆佸姞閫熷害銆佹俯搴︿紶鎰熷櫒 - imu660ra_write_register(IMU660RA_ACC_CONF, 0xA7); // 鍔犻熷害閲囬泦閰嶇疆 鎬ц兘妯″紡 姝e父閲囬泦 50Hz 閲囨牱棰戠巼 - imu660ra_write_register(IMU660RA_GYR_CONF, 0xA9); // 闄铻轰华閲囬泦閰嶇疆 鎬ц兘妯″紡 姝e父閲囬泦 200Hz 閲囨牱棰戠巼 + imu660ra_write_register(IMU660RA_PWR_CTRL, 0x0E); // 寮鍚ц兘妯″紡 浣胯兘闄铻轰华銆佸姞閫熷害銆佹俯搴︿紶鎰熷櫒 + imu660ra_write_register(IMU660RA_ACC_CONF, 0xA7); // 鍔犻熷害閲囬泦閰嶇疆 鎬ц兘妯″紡 姝e父閲囬泦 50Hz 閲囨牱棰戠巼 + imu660ra_write_register(IMU660RA_GYR_CONF, 0xA9); // 闄铻轰华閲囬泦閰嶇疆 鎬ц兘妯″紡 姝e父閲囬泦 200Hz 閲囨牱棰戠巼 // IMU660RA_ACC_SAMPLE 瀵勫瓨鍣 // 璁剧疆涓 0x00 鍔犻熷害璁¢噺绋嬩负 卤2 g 鑾峰彇鍒扮殑鍔犻熷害璁℃暟鎹櫎浠 16384 鍙互杞寲涓哄甫鐗╃悊鍗曚綅鐨勬暟鎹 鍗曚綅 g(m/s^2) // 璁剧疆涓 0x01 鍔犻熷害璁¢噺绋嬩负 卤4 g 鑾峰彇鍒扮殑鍔犻熷害璁℃暟鎹櫎浠 8192 鍙互杞寲涓哄甫鐗╃悊鍗曚綅鐨勬暟鎹 鍗曚綅 g(m/s^2) // 璁剧疆涓 0x02 鍔犻熷害璁¢噺绋嬩负 卤8 g 鑾峰彇鍒扮殑鍔犻熷害璁℃暟鎹櫎浠 4096 鍙互杞寲涓哄甫鐗╃悊鍗曚綅鐨勬暟鎹 鍗曚綅 g(m/s^2) // 璁剧疆涓 0x03 鍔犻熷害璁¢噺绋嬩负 卤16 g 鑾峰彇鍒扮殑鍔犻熷害璁℃暟鎹櫎浠 2048 鍙互杞寲涓哄甫鐗╃悊鍗曚綅鐨勬暟鎹 鍗曚綅 g(m/s^2) - switch(IMU660RA_ACC_SAMPLE_DEFAULT) - { - default: - { + switch (IMU660RA_ACC_SAMPLE_DEFAULT) { + default: { zf_log(0, "IMU660RA_ACC_SAMPLE_DEFAULT set error."); return_state = 1; - }break; - case IMU660RA_ACC_SAMPLE_SGN_2G: - { + } break; + case IMU660RA_ACC_SAMPLE_SGN_2G: { imu660ra_write_register(IMU660RA_ACC_RANGE, 0x00); imu660ra_transition_factor[0] = 16384; - }break; - case IMU660RA_ACC_SAMPLE_SGN_4G: - { + } break; + case IMU660RA_ACC_SAMPLE_SGN_4G: { imu660ra_write_register(IMU660RA_ACC_RANGE, 0x01); imu660ra_transition_factor[0] = 8192; - }break; - case IMU660RA_ACC_SAMPLE_SGN_8G: - { + } break; + case IMU660RA_ACC_SAMPLE_SGN_8G: { imu660ra_write_register(IMU660RA_ACC_RANGE, 0x02); imu660ra_transition_factor[0] = 4096; - }break; - case IMU660RA_ACC_SAMPLE_SGN_16G: - { + } break; + case IMU660RA_ACC_SAMPLE_SGN_16G: { imu660ra_write_register(IMU660RA_ACC_RANGE, 0x03); imu660ra_transition_factor[0] = 2048; - }break; + } break; } - if(1 == return_state) - { + if (1 == return_state) { break; } @@ -294,45 +298,35 @@ uint8 imu660ra_init (void) // 璁剧疆涓 0x02 闄铻轰华閲忕▼涓 卤500 dps 鑾峰彇鍒扮殑闄铻轰华鏁版嵁闄や互 65.6 鍙互杞寲涓哄甫鐗╃悊鍗曚綅鐨勬暟鎹 鍗曚綅涓 掳/s // 璁剧疆涓 0x01 闄铻轰华閲忕▼涓 卤1000 dps 鑾峰彇鍒扮殑闄铻轰华鏁版嵁闄や互 32.8 鍙互杞寲涓哄甫鐗╃悊鍗曚綅鐨勬暟鎹 鍗曚綅涓 掳/s // 璁剧疆涓 0x00 闄铻轰华閲忕▼涓 卤2000 dps 鑾峰彇鍒扮殑闄铻轰华鏁版嵁闄や互 16.4 鍙互杞寲涓哄甫鐗╃悊鍗曚綅鐨勬暟鎹 鍗曚綅涓 掳/s - switch(IMU660RA_GYRO_SAMPLE_DEFAULT) - { - default: - { + switch (IMU660RA_GYRO_SAMPLE_DEFAULT) { + default: { zf_log(0, "IMU660RA_GYRO_SAMPLE_DEFAULT set error."); return_state = 1; - }break; - case IMU660RA_GYRO_SAMPLE_SGN_125DPS: - { + } break; + case IMU660RA_GYRO_SAMPLE_SGN_125DPS: { imu660ra_write_register(IMU660RA_GYR_RANGE, 0x04); imu660ra_transition_factor[1] = 262.4; - }break; - case IMU660RA_GYRO_SAMPLE_SGN_250DPS: - { + } break; + case IMU660RA_GYRO_SAMPLE_SGN_250DPS: { imu660ra_write_register(IMU660RA_GYR_RANGE, 0x03); imu660ra_transition_factor[1] = 131.2; - }break; - case IMU660RA_GYRO_SAMPLE_SGN_500DPS: - { + } break; + case IMU660RA_GYRO_SAMPLE_SGN_500DPS: { imu660ra_write_register(IMU660RA_GYR_RANGE, 0x02); imu660ra_transition_factor[1] = 65.6; - }break; - case IMU660RA_GYRO_SAMPLE_SGN_1000DPS: - { + } break; + case IMU660RA_GYRO_SAMPLE_SGN_1000DPS: { imu660ra_write_register(IMU660RA_GYR_RANGE, 0x01); imu660ra_transition_factor[1] = 32.8; - }break; - case IMU660RA_GYRO_SAMPLE_SGN_2000DPS: - { + } break; + case IMU660RA_GYRO_SAMPLE_SGN_2000DPS: { imu660ra_write_register(IMU660RA_GYR_RANGE, 0x00); imu660ra_transition_factor[1] = 16.4; - }break; + } break; } - if(1 == return_state) - { + if (1 == return_state) { break; } - }while(0); + } while (0); return return_state; } - - diff --git a/libraries/zf_device/zf_device_imu660ra.h b/libraries/zf_device/zf_device_imu660ra.h index 93fe0f7..f886038 100644 --- a/libraries/zf_device/zf_device_imu660ra.h +++ b/libraries/zf_device/zf_device_imu660ra.h @@ -1,131 +1,136 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library 鍗筹紙CH32V307VCT6 寮婧愬簱锛夋槸涓涓熀浜庡畼鏂 SDK 鎺ュ彛鐨勭涓夋柟寮婧愬簱 -* Copyright (c) 2022 SEEKFREE 閫愰绉戞妧 -* -* 鏈枃浠舵槸CH32V307VCT6 寮婧愬簱鐨勪竴閮ㄥ垎 -* -* CH32V307VCT6 寮婧愬簱 鏄厤璐硅蒋浠 -* 鎮ㄥ彲浠ユ牴鎹嚜鐢辫蒋浠跺熀閲戜細鍙戝竷鐨 GPL锛圙NU General Public License锛屽嵆 GNU閫氱敤鍏叡璁稿彲璇侊級鐨勬潯娆 -* 鍗 GPL 鐨勭3鐗堬紙鍗 GPL3.0锛夋垨锛堟偍閫夋嫨鐨勶級浠讳綍鍚庢潵鐨勭増鏈紝閲嶆柊鍙戝竷鍜/鎴栦慨鏀瑰畠 -* -* 鏈紑婧愬簱鐨勫彂甯冩槸甯屾湜瀹冭兘鍙戞尌浣滅敤锛屼絾骞舵湭瀵瑰叾浣滀换浣曠殑淇濊瘉 -* 鐢氳嚦娌℃湁闅愬惈鐨勯傞攢鎬ф垨閫傚悎鐗瑰畾鐢ㄩ旂殑淇濊瘉 -* 鏇村缁嗚妭璇峰弬瑙 GPL -* -* 鎮ㄥ簲璇ュ湪鏀跺埌鏈紑婧愬簱鐨勫悓鏃舵敹鍒颁竴浠 GPL 鐨勫壇鏈 -* 濡傛灉娌℃湁锛岃鍙傞槄 -* -* 棰濆娉ㄦ槑锛 -* 鏈紑婧愬簱浣跨敤 GPL3.0 寮婧愯鍙瘉鍗忚 浠ヤ笂璁稿彲鐢虫槑涓鸿瘧鏂囩増鏈 -* 璁稿彲鐢虫槑鑻辨枃鐗堝湪 libraries/doc 鏂囦欢澶逛笅鐨 GPL3_permission_statement.txt 鏂囦欢涓 -* 璁稿彲璇佸壇鏈湪 libraries 鏂囦欢澶逛笅 鍗宠鏂囦欢澶逛笅鐨 LICENSE 鏂囦欢 -* 娆㈣繋鍚勪綅浣跨敤骞朵紶鎾湰绋嬪簭 浣嗕慨鏀瑰唴瀹规椂蹇呴』淇濈暀閫愰绉戞妧鐨勭増鏉冨0鏄庯紙鍗虫湰澹版槑锛 -* -* 鏂囦欢鍚嶇О zf_device_imu660ra -* 鍏徃鍚嶇О 鎴愰兘閫愰绉戞妧鏈夐檺鍏徃 -* 鐗堟湰淇℃伅 鏌ョ湅 libraries/doc 鏂囦欢澶瑰唴 version 鏂囦欢 鐗堟湰璇存槑 -* 寮鍙戠幆澧 MounRiver Studio V1.8.1 -* 閫傜敤骞冲彴 CH32V307VCT6 -* 搴楅摵閾炬帴 https://seekfree.taobao.com/ -* -* 淇敼璁板綍 -* 鏃ユ湡 浣滆 澶囨敞 -* 2022-09-15 澶 first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library 鍗筹紙CH32V307VCT6 寮婧愬簱锛夋槸涓涓熀浜庡畼鏂 SDK 鎺ュ彛鐨勭涓夋柟寮婧愬簱 + * Copyright (c) 2022 SEEKFREE 閫愰绉戞妧 + * + * 鏈枃浠舵槸CH32V307VCT6 寮婧愬簱鐨勪竴閮ㄥ垎 + * + * CH32V307VCT6 寮婧愬簱 鏄厤璐硅蒋浠 + * 鎮ㄥ彲浠ユ牴鎹嚜鐢辫蒋浠跺熀閲戜細鍙戝竷鐨 GPL锛圙NU General Public License锛屽嵆 GNU閫氱敤鍏叡璁稿彲璇侊級鐨勬潯娆 + * 鍗 GPL 鐨勭3鐗堬紙鍗 GPL3.0锛夋垨锛堟偍閫夋嫨鐨勶級浠讳綍鍚庢潵鐨勭増鏈紝閲嶆柊鍙戝竷鍜/鎴栦慨鏀瑰畠 + * + * 鏈紑婧愬簱鐨勫彂甯冩槸甯屾湜瀹冭兘鍙戞尌浣滅敤锛屼絾骞舵湭瀵瑰叾浣滀换浣曠殑淇濊瘉 + * 鐢氳嚦娌℃湁闅愬惈鐨勯傞攢鎬ф垨閫傚悎鐗瑰畾鐢ㄩ旂殑淇濊瘉 + * 鏇村缁嗚妭璇峰弬瑙 GPL + * + * 鎮ㄥ簲璇ュ湪鏀跺埌鏈紑婧愬簱鐨勫悓鏃舵敹鍒颁竴浠 GPL 鐨勫壇鏈 + * 濡傛灉娌℃湁锛岃鍙傞槄 + * + * 棰濆娉ㄦ槑锛 + * 鏈紑婧愬簱浣跨敤 GPL3.0 寮婧愯鍙瘉鍗忚 浠ヤ笂璁稿彲鐢虫槑涓鸿瘧鏂囩増鏈 + * 璁稿彲鐢虫槑鑻辨枃鐗堝湪 libraries/doc 鏂囦欢澶逛笅鐨 GPL3_permission_statement.txt 鏂囦欢涓 + * 璁稿彲璇佸壇鏈湪 libraries 鏂囦欢澶逛笅 鍗宠鏂囦欢澶逛笅鐨 LICENSE 鏂囦欢 + * 娆㈣繋鍚勪綅浣跨敤骞朵紶鎾湰绋嬪簭 浣嗕慨鏀瑰唴瀹规椂蹇呴』淇濈暀閫愰绉戞妧鐨勭増鏉冨0鏄庯紙鍗虫湰澹版槑锛 + * + * 鏂囦欢鍚嶇О zf_device_imu660ra + * 鍏徃鍚嶇О 鎴愰兘閫愰绉戞妧鏈夐檺鍏徃 + * 鐗堟湰淇℃伅 鏌ョ湅 libraries/doc 鏂囦欢澶瑰唴 version 鏂囦欢 鐗堟湰璇存槑 + * 寮鍙戠幆澧 MounRiver Studio V1.8.1 + * 閫傜敤骞冲彴 CH32V307VCT6 + * 搴楅摵閾炬帴 https://seekfree.taobao.com/ + * + * 淇敼璁板綍 + * 鏃ユ湡 浣滆 澶囨敞 + * 2022-09-15 澶 first version + ********************************************************************************************************************/ /********************************************************************************************************************* -* 鎺ョ嚎瀹氫箟锛 -* ------------------------------------ -* 妯″潡绠¤剼 鍗曠墖鏈虹鑴 -* // 纭欢 SPI 寮曡剼 -* SCL/SPC 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SPC_PIN 瀹忓畾涔 -* SDA/DSI 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDI_PIN 瀹忓畾涔 -* SA0/SDO 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDO_PIN 瀹忓畾涔 -* CS 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_CS_PIN 瀹忓畾涔 -* VCC 3.3V鐢垫簮 -* GND 鐢垫簮鍦 -* 鍏朵綑寮曡剼鎮┖ -* -* // 杞欢 IIC 寮曡剼 -* SCL/SPC 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SCL_PIN 瀹忓畾涔 -* SDA/DSI 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDA_PIN 瀹忓畾涔 -* VCC 3.3V鐢垫簮 -* GND 鐢垫簮鍦 -* 鍏朵綑寮曡剼鎮┖ -* ------------------------------------ -********************************************************************************************************************/ + * 鎺ョ嚎瀹氫箟锛 + * ------------------------------------ + * 妯″潡绠¤剼 鍗曠墖鏈虹鑴 + * // 纭欢 SPI 寮曡剼 + * SCL/SPC 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SPC_PIN 瀹忓畾涔 + * SDA/DSI 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDI_PIN 瀹忓畾涔 + * SA0/SDO 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDO_PIN 瀹忓畾涔 + * CS 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_CS_PIN 瀹忓畾涔 + * VCC 3.3V鐢垫簮 + * GND 鐢垫簮鍦 + * 鍏朵綑寮曡剼鎮┖ + * + * // 杞欢 IIC 寮曡剼 + * SCL/SPC 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SCL_PIN 瀹忓畾涔 + * SDA/DSI 鏌ョ湅 zf_device_imu660ra.h 涓 IMU660RA_SDA_PIN 瀹忓畾涔 + * VCC 3.3V鐢垫簮 + * GND 鐢垫簮鍦 + * 鍏朵綑寮曡剼鎮┖ + * ------------------------------------ + ********************************************************************************************************************/ #ifndef _zf_device_imu660ra_h_ #define _zf_device_imu660ra_h_ #include "zf_common_typedef.h" -#define IMU660RA_USE_SOFT_IIC (0) // 榛樿浣跨敤纭欢 SPI 鏂瑰紡椹卞姩 -#if IMU660RA_USE_SOFT_IIC // 杩欎袱娈 棰滆壊姝e父鐨勬墠鏄纭殑 棰滆壊鐏扮殑灏辨槸娌℃湁鐢ㄧ殑 +#define IMU660RA_USE_SOFT_IIC (1) // 榛樿浣跨敤纭欢 SPI 鏂瑰紡椹卞姩 +#if IMU660RA_USE_SOFT_IIC // 杩欎袱娈 棰滆壊姝e父鐨勬墠鏄纭殑 棰滆壊鐏扮殑灏辨槸娌℃湁鐢ㄧ殑 //====================================================杞欢 IIC 椹卞姩==================================================== -#define IMU660RA_SOFT_IIC_DELAY (10 ) // 杞欢 IIC 鐨勬椂閽熷欢鏃跺懆鏈 鏁板艰秺灏 IIC 閫氫俊閫熺巼瓒婂揩 -#define IMU660RA_SCL_PIN (B13) // 杞欢 IIC SCL 寮曡剼 杩炴帴 IMU660RA 鐨 SCL 寮曡剼 -#define IMU660RA_SDA_PIN (B15) // 杞欢 IIC SDA 寮曡剼 杩炴帴 IMU660RA 鐨 SDA 寮曡剼 +#define IMU660RA_SOFT_IIC_DELAY (10) // 杞欢 IIC 鐨勬椂閽熷欢鏃跺懆鏈 鏁板艰秺灏 IIC 閫氫俊閫熺巼瓒婂揩 +#define IMU660RA_SCL_PIN (B3) // 杞欢 IIC SCL 寮曡剼 杩炴帴 IMU660RA 鐨 SCL 寮曡剼 +#define IMU660RA_SDA_PIN (B5) // 杞欢 IIC SDA 寮曡剼 杩炴帴 IMU660RA 鐨 SDA 寮曡剼 //====================================================杞欢 IIC 椹卞姩==================================================== #else //====================================================纭欢 SPI 椹卞姩==================================================== -#define IMU660RA_SPI_SPEED (10*1000*1000) // 纭欢 SPI 閫熺巼 -#define IMU660RA_SPI SPI_3 // 纭欢 SPI 鍙 -#define IMU660RA_SPC_PIN SPI3_MAP0_SCK_B3 // 纭欢 SPI SCK 寮曡剼 -#define IMU660RA_SDI_PIN SPI3_MAP0_MOSI_B5 // 纭欢 SPI MOSI 寮曡剼 -#define IMU660RA_SDO_PIN SPI3_MAP0_MISO_B4 // 纭欢 SPI MISO 寮曡剼 +#define IMU660RA_SPI_SPEED (10 * 1000 * 1000) // 纭欢 SPI 閫熺巼 +#define IMU660RA_SPI SPI_3 // 纭欢 SPI 鍙 +#define IMU660RA_SPC_PIN SPI3_MAP0_SCK_B3 // 纭欢 SPI SCK 寮曡剼 +#define IMU660RA_SDI_PIN SPI3_MAP0_MOSI_B5 // 纭欢 SPI MOSI 寮曡剼 +#define IMU660RA_SDO_PIN SPI3_MAP0_MISO_B4 // 纭欢 SPI MISO 寮曡剼 //====================================================纭欢 SPI 椹卞姩==================================================== #endif -#define IMU660RA_CS_PIN (C10) // CS 鐗囬夊紩鑴 -#define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN))) +#define IMU660RA_CS_PIN (C10) // CS 鐗囬夊紩鑴 +#define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN))) -typedef enum -{ - IMU660RA_ACC_SAMPLE_SGN_2G , // 鍔犻熷害璁¢噺绋 卤2G (ACC = Accelerometer 鍔犻熷害璁) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (G = g 閲嶅姏鍔犻熷害 g鈮9.80 m/s^2) - IMU660RA_ACC_SAMPLE_SGN_4G , // 鍔犻熷害璁¢噺绋 卤4G (ACC = Accelerometer 鍔犻熷害璁) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (G = g 閲嶅姏鍔犻熷害 g鈮9.80 m/s^2) - IMU660RA_ACC_SAMPLE_SGN_8G , // 鍔犻熷害璁¢噺绋 卤8G (ACC = Accelerometer 鍔犻熷害璁) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (G = g 閲嶅姏鍔犻熷害 g鈮9.80 m/s^2) - IMU660RA_ACC_SAMPLE_SGN_16G, // 鍔犻熷害璁¢噺绋 卤16G (ACC = Accelerometer 鍔犻熷害璁) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (G = g 閲嶅姏鍔犻熷害 g鈮9.80 m/s^2) -}imu660ra_acc_sample_config; +typedef enum { + IMU660RA_ACC_SAMPLE_SGN_2G, // 鍔犻熷害璁¢噺绋 卤2G (ACC = Accelerometer 鍔犻熷害璁) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (G = g 閲嶅姏鍔犻熷害 g鈮9.80 m/s^2) + IMU660RA_ACC_SAMPLE_SGN_4G, // 鍔犻熷害璁¢噺绋 卤4G (ACC = Accelerometer 鍔犻熷害璁) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (G = g 閲嶅姏鍔犻熷害 g鈮9.80 m/s^2) + IMU660RA_ACC_SAMPLE_SGN_8G, // 鍔犻熷害璁¢噺绋 卤8G (ACC = Accelerometer 鍔犻熷害璁) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (G = g 閲嶅姏鍔犻熷害 g鈮9.80 m/s^2) + IMU660RA_ACC_SAMPLE_SGN_16G, // 鍔犻熷害璁¢噺绋 卤16G (ACC = Accelerometer 鍔犻熷害璁) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (G = g 閲嶅姏鍔犻熷害 g鈮9.80 m/s^2) +} imu660ra_acc_sample_config; -typedef enum -{ - IMU660RA_GYRO_SAMPLE_SGN_125DPS , // 闄铻轰华閲忕▼ 卤125DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) - IMU660RA_GYRO_SAMPLE_SGN_250DPS , // 闄铻轰华閲忕▼ 卤250DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) - IMU660RA_GYRO_SAMPLE_SGN_500DPS , // 闄铻轰华閲忕▼ 卤500DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) - IMU660RA_GYRO_SAMPLE_SGN_1000DPS, // 闄铻轰华閲忕▼ 卤1000DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) - IMU660RA_GYRO_SAMPLE_SGN_2000DPS, // 闄铻轰华閲忕▼ 卤2000DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) -}imu660ra_gyro_sample_config; +typedef enum { + IMU660RA_GYRO_SAMPLE_SGN_125DPS, // 闄铻轰华閲忕▼ 卤125DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) + IMU660RA_GYRO_SAMPLE_SGN_250DPS, // 闄铻轰华閲忕▼ 卤250DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) + IMU660RA_GYRO_SAMPLE_SGN_500DPS, // 闄铻轰华閲忕▼ 卤500DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) + IMU660RA_GYRO_SAMPLE_SGN_1000DPS, // 闄铻轰华閲忕▼ 卤1000DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) + IMU660RA_GYRO_SAMPLE_SGN_2000DPS, // 闄铻轰华閲忕▼ 卤2000DPS (GYRO = Gyroscope 闄铻轰华) (SGN = signum 甯︾鍙锋暟 琛ㄧず姝h礋鑼冨洿) (DPS = Degree Per Second 瑙掗熷害鍗曚綅 掳/S) +} imu660ra_gyro_sample_config; -#define IMU660RA_ACC_SAMPLE_DEFAULT ( IMU660RA_ACC_SAMPLE_SGN_8G ) // 鍦ㄨ繖璁剧疆榛樿鐨 鍔犻熷害璁 鍒濆鍖栭噺绋 -#define IMU660RA_GYRO_SAMPLE_DEFAULT ( IMU660RA_GYRO_SAMPLE_SGN_2000DPS ) // 鍦ㄨ繖璁剧疆榛樿鐨 闄铻轰华 鍒濆鍖栭噺绋 +#define IMU660RA_ACC_SAMPLE_DEFAULT (IMU660RA_ACC_SAMPLE_SGN_8G) // 鍦ㄨ繖璁剧疆榛樿鐨 鍔犻熷害璁 鍒濆鍖栭噺绋 +#define IMU660RA_GYRO_SAMPLE_DEFAULT (IMU660RA_GYRO_SAMPLE_SGN_2000DPS) // 鍦ㄨ繖璁剧疆榛樿鐨 闄铻轰华 鍒濆鍖栭噺绋 -#define IMU660RA_TIMEOUT_COUNT ( 0x00FF ) // IMU660RA 瓒呮椂璁℃暟 +#define IMU660RA_TIMEOUT_COUNT (0x00FF) // IMU660RA 瓒呮椂璁℃暟 //================================================瀹氫箟 IMU660RA 鍐呴儴鍦板潃================================================ -#define IMU660RA_DEV_ADDR ( 0x69 ) // SA0鎺ュ湴锛0x68 SA0涓婃媺锛0x69 妯″潡榛樿涓婃媺 -#define IMU660RA_SPI_W ( 0x00 ) -#define IMU660RA_SPI_R ( 0x80 ) +#define IMU660RA_DEV_ADDR (0x69) // SA0 鎺ュ湴锛0x68 SA0 涓婃媺锛0x69 妯″潡榛樿涓婃媺 +#define IMU660RA_SPI_W (0x00) +#define IMU660RA_SPI_R (0x80) -#define IMU660RA_CHIP_ID ( 0x00 ) -#define IMU660RA_PWR_CONF ( 0x7C ) -#define IMU660RA_PWR_CTRL ( 0x7D ) -#define IMU660RA_INIT_CTRL ( 0x59 ) -#define IMU660RA_INIT_DATA ( 0x5E ) -#define IMU660RA_INT_STA ( 0x21 ) -#define IMU660RA_ACC_ADDRESS ( 0x0C ) -#define IMU660RA_GYRO_ADDRESS ( 0x12 ) -#define IMU660RA_ACC_CONF ( 0x40 ) -#define IMU660RA_ACC_RANGE ( 0x41 ) -#define IMU660RA_GYR_CONF ( 0x42 ) -#define IMU660RA_GYR_RANGE ( 0x43 ) +#define IMU660RA_CHIP_ID (0x00) +#define IMU660RA_PWR_CONF (0x7C) +#define IMU660RA_PWR_CTRL (0x7D) +#define IMU660RA_INIT_CTRL (0x59) +#define IMU660RA_INIT_DATA (0x5E) +#define IMU660RA_INT_STA (0x21) +#define IMU660RA_TEMP_ADDRESS (0x22) +#define IMU660RA_ACC_ADDRESS (0x0C) +#define IMU660RA_GYRO_ADDRESS (0x12) +#define IMU660RA_ACC_CONF (0x40) +#define IMU660RA_ACC_RANGE (0x41) +#define IMU660RA_GYR_CONF (0x42) +#define IMU660RA_GYR_RANGE (0x43) //================================================瀹氫箟 IMU660RA 鍐呴儴鍦板潃================================================ -extern int16 imu660ra_gyro_x, imu660ra_gyro_y, imu660ra_gyro_z; // 涓夎酱闄铻轰华鏁版嵁 gyro (闄铻轰华) -extern int16 imu660ra_acc_x, imu660ra_acc_y, imu660ra_acc_z; // 涓夎酱鍔犻熷害璁℃暟鎹 acc (accelerometer 鍔犻熷害璁) +extern int16 imu660ra_gyro_x; +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]; -void imu660ra_get_acc (void); // 鑾峰彇 IMU660RA 鍔犻熷害璁℃暟鎹 -void imu660ra_get_gyro (void); // 鑾峰彇 IMU660RA 闄铻轰华鏁版嵁 +void imu660ra_get_acc(void); // 鑾峰彇 IMU660RA 鍔犻熷害璁℃暟鎹 +void imu660ra_get_gyro(void); // 鑾峰彇 IMU660RA 闄铻轰华鏁版嵁 +void imu660ra_get_temperature(void); //------------------------------------------------------------------------------------------------------------------- // 鍑芥暟绠浠 灏 IMU660RA 鍔犻熷害璁℃暟鎹浆鎹负瀹為檯鐗╃悊鏁版嵁 @@ -134,7 +139,7 @@ void imu660ra_get_gyro (void); // 浣跨敤绀轰緥 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 闄铻轰华鏁版嵁杞崲涓哄疄闄呯墿鐞嗘暟鎹 @@ -143,9 +148,8 @@ void imu660ra_get_gyro (void); // 浣跨敤绀轰緥 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 - From b908ae85935c8c679016bd3c3e01c4f91306f4de Mon Sep 17 00:00:00 2001 From: bmy <2583236812@qq.com> Date: Fri, 15 Dec 2023 21:42:43 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E7=94=B5?= =?UTF-8?q?=E6=9C=BA=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E5=87=BD=E6=95=B0?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=97=8B=E9=92=AE=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/by_fan_control.c | 26 ++++++++++++++++++++ app/by_fan_control.h | 11 +++++++++ app/{by_peripheral_init.c => by_pt_button.c} | 9 ++++++- app/{by_peripheral_init.h => by_pt_button.h} | 6 ++--- app/isr.c | 2 +- app/main.c | 11 ++++----- 6 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 app/by_fan_control.c create mode 100644 app/by_fan_control.h rename app/{by_peripheral_init.c => by_pt_button.c} (69%) rename app/{by_peripheral_init.h => by_pt_button.h} (77%) diff --git a/app/by_fan_control.c b/app/by_fan_control.c new file mode 100644 index 0000000..ad7ccc5 --- /dev/null +++ b/app/by_fan_control.c @@ -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); +} diff --git a/app/by_fan_control.h b/app/by_fan_control.h new file mode 100644 index 0000000..2ae6049 --- /dev/null +++ b/app/by_fan_control.h @@ -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 \ No newline at end of file diff --git a/app/by_peripheral_init.c b/app/by_pt_button.c similarity index 69% rename from app/by_peripheral_init.c rename to app/by_pt_button.c index c44f301..fc0a5ce 100644 --- a/app/by_peripheral_init.c +++ b/app/by_pt_button.c @@ -1,4 +1,4 @@ -#include "by_peripheral_init.h" +#include "by_pt_button.h" #include "zf_common_headfile.h" uint8_t potate_button; void by_gpio_init(void) @@ -17,4 +17,11 @@ 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); + } \ No newline at end of file diff --git a/app/by_peripheral_init.h b/app/by_pt_button.h similarity index 77% rename from app/by_peripheral_init.h rename to app/by_pt_button.h index 7e19940..4e0ded1 100644 --- a/app/by_peripheral_init.h +++ b/app/by_pt_button.h @@ -1,5 +1,5 @@ -#ifndef _BY_PERIPHERAL_INIT_H__ -#define _BY_PERIPHERAL_INIT_H__ +#ifndef _BY_PT_BUTTON_H__ +#define _BY_PT_BUTTON_H__ #include "stdio.h" #include "ch32v30x.h" @@ -11,5 +11,5 @@ 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 \ No newline at end of file diff --git a/app/isr.c b/app/isr.c index af20fec..33f643e 100644 --- a/app/isr.c +++ b/app/isr.c @@ -34,7 +34,7 @@ ********************************************************************************************************************/ #include "zf_common_headfile.h" -#include "by_peripheral_init.h" +#include "by_pt_button.h" void NMI_Handler(void) __attribute__((interrupt())); void HardFault_Handler(void) __attribute__((interrupt())); diff --git a/app/main.c b/app/main.c index b620c6c..5822915 100644 --- a/app/main.c +++ b/app/main.c @@ -33,7 +33,8 @@ * 2022-09-15 大W first version ********************************************************************************************************************/ #include "zf_common_headfile.h" -#include "by_peripheral_init.h" +#include "by_pt_button.h" +#include "by_fan_control.h" int main (void) @@ -45,17 +46,15 @@ int main (void) ips114_init(); by_gpio_init(); by_exit_init(); + by_pwm_init(); // mt9v03x_init(); // 此处编写用户代码 例如外设初始化代码等 while(1) { // 此处编写需要循环执行的代码 - // if(mt9v03x_finish_flag){ - // ips114_show_gray_image(0, 0, mt9v03x_image[0], 188, 120, 188, 120,0); - // } - printf("%d\r\n",by_get_pb_statu()); - system_delay_ms(100); + + // 此处编写需要循环执行的代码 } } From ac64c07fa6c90e1c9d47ce57951442cb093c96c2 Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Sat, 16 Dec 2023 11:17:45 +0800 Subject: [PATCH 4/6] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E8=87=AA=E8=BF=B0?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Readme.md b/Readme.md index 4680052..8972d31 100644 --- a/Readme.md +++ b/Readme.md @@ -1,24 +1,24 @@ # 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` - -鐒跺悗灏卞彲浠ユ剦蹇殑浣跨敤 VSCode 杩涜寮鍙戝拰涓嬭浇浜 - -## 甯哥敤蹇嵎閿細 +## 2 甯哥敤蹇嵎閿 * 缂栬瘧锛歚F7` From 4bb5fa85491c5854780a26376666ce7e5245ef96 Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Sat, 16 Dec 2023 11:30:39 +0800 Subject: [PATCH 5/6] =?UTF-8?q?pref=EF=BC=9A=20=E4=BF=AE=E6=94=B9=E9=80=90?= =?UTF-8?q?=E9=A3=9E=E5=85=B3=E4=BA=8E=20uint32=20=E5=92=8C=20int32=20?= =?UTF-8?q?=E7=9A=84=E5=AE=9A=E4=B9=89=EF=BC=8C=E4=BD=BF=E5=85=B6=E7=AC=A6?= =?UTF-8?q?=E5=90=88=E9=9D=99=E6=80=81=E6=A3=80=E6=9F=A5=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/zf_common/zf_common_typedef.h | 116 +++++++++++++----------- 1 file changed, 61 insertions(+), 55 deletions(-) diff --git a/libraries/zf_common/zf_common_typedef.h b/libraries/zf_common/zf_common_typedef.h index 6778a29..210cbd3 100644 --- a/libraries/zf_common/zf_common_typedef.h +++ b/libraries/zf_common/zf_common_typedef.h @@ -1,37 +1,37 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library 即(CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库 -* Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是CH32V307VCT6 开源库的一部分 -* -* CH32V307VCT6 开源库 是免费软件 -* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 -* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* -* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 -* 甚至没有隐含的适销性或适合特定用途的保证 -* 更多细节请参见 GPL -* -* 您应该在收到本开源库的同时收到一份 GPL 的副本 -* 如果没有,请参阅 -* -* 额外注明: -* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 -* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 -* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 -* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) -* -* 文件名称 zf_common_typedef -* 公司名称 成都逐飞科技有限公司 -* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 MounRiver Studio V1.8.1 -* 适用平台 CH32V307VCT6 -* 店铺链接 https://seekfree.taobao.com/ -* -* 修改记录 -* 日期 作者 备注 -* 2022-09-15 大W first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library 即(CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库 + * Copyright (c) 2022 SEEKFREE 逐飞科技 + * + * 本文件是CH32V307VCT6 开源库的一部分 + * + * CH32V307VCT6 开源库 是免费软件 + * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 + * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 + * + * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 + * 甚至没有隐含的适销性或适合特定用途的保证 + * 更多细节请参见 GPL + * + * 您应该在收到本开源库的同时收到一份 GPL 的副本 + * 如果没有,请参阅 + * + * 额外注明: + * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 + * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 + * 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 + * 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) + * + * 文件名称 zf_common_typedef + * 公司名称 成都逐飞科技有限公司 + * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 + * 开发环境 MounRiver Studio V1.8.1 + * 适用平台 CH32V307VCT6 + * 店铺链接 https://seekfree.taobao.com/ + * + * 修改记录 + * 日期 作者 备注 + * 2022-09-15 大W first version + ********************************************************************************************************************/ #ifndef _zf_common_typedef_h_ #define _zf_common_typedef_h_ @@ -45,36 +45,42 @@ //=================================================== 类型定义 =================================================== -//#define COMPATIBLE_WITH_OLDER_VERSIONS // 兼容旧版开源库接口 -#define USE_ZF_TYPEDEF (1) // 是否启用类型定义申明 +// #define COMPATIBLE_WITH_OLDER_VERSIONS // 兼容旧版开源库接口 +#define USE_ZF_TYPEDEF (1) // 是否启用类型定义申明 #if USE_ZF_TYPEDEF // 数据类型声明 // 尽量使用 stdint.h 定义的类型名称 避免冲突 这里可以裁剪 -typedef unsigned char uint8; // 无符号 8 bits -typedef unsigned short int uint16; // 无符号 16 bits -typedef unsigned int uint32; // 无符号 32 bits -typedef unsigned long long uint64; // 无符号 64 bits -typedef signed char int8; // 有符号 8 bits -typedef signed short int int16; // 有符号 16 bits -typedef signed int int32; // 有符号 32 bits -typedef signed long long int64; // 有符号 64 bits +// 上面话说的挺好,uint32(aka unsigned int) 和 uint32_t(aka unsigned long) 不一致 +// 虽然在 32 位机上都是四字节,但是静态检查总会有提示,很不爽,等下改掉 +// typedef unsigned int uint32; // 无符号 32 bits -typedef volatile uint8 vuint8; // 易变性修饰 无符号 8 bits -typedef volatile uint16 vuint16; // 易变性修饰 无符号 16 bits -typedef volatile uint32 vuint32; // 易变性修饰 无符号 32 bits -typedef volatile uint64 vuint64; // 易变性修饰 无符号 64 bits +typedef unsigned char uint8; // 无符号 8 bits +typedef unsigned short uint16; // 无符号 16 bits -typedef volatile int8 vint8; // 易变性修饰 有符号 8 bits -typedef volatile int16 vint16; // 易变性修饰 有符号 16 bits -typedef volatile int32 vint32; // 易变性修饰 有符号 32 bits -typedef volatile int64 vint64; // 易变性修饰 有符号 64 bits +typedef unsigned long uint32; // 无符号 32 bits +typedef unsigned long long uint64; // 无符号 64 bits -#define ZF_ENABLE (1) -#define ZF_DISABLE (0) +typedef signed char int8; // 有符号 8 bits +typedef signed short int16; // 有符号 16 bits +typedef signed long int32; // 有符号 32 bits +typedef signed long long int64; // 有符号 64 bits -#define ZF_TRUE (1) -#define ZF_FALSE (0) +typedef volatile uint8 vuint8; // 易变性修饰 无符号 8 bits +typedef volatile uint16 vuint16; // 易变性修饰 无符号 16 bits +typedef volatile uint32 vuint32; // 易变性修饰 无符号 32 bits +typedef volatile uint64 vuint64; // 易变性修饰 无符号 64 bits + +typedef volatile int8 vint8; // 易变性修饰 有符号 8 bits +typedef volatile int16 vint16; // 易变性修饰 有符号 16 bits +typedef volatile int32 vint32; // 易变性修饰 有符号 32 bits +typedef volatile int64 vint64; // 易变性修饰 有符号 64 bits + +#define ZF_ENABLE (1) +#define ZF_DISABLE (0) + +#define ZF_TRUE (1) +#define ZF_FALSE (0) #endif //=================================================== 类型定义 =================================================== From 619a8ca4fd3738555bcfe4eaceb7aa8502ce78ac Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Sat, 16 Dec 2023 11:31:25 +0800 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=88=B5?= =?UTF-8?q?=E6=9C=BA=E6=8E=A7=E5=88=B6=E6=8E=A5=E5=8F=A3=20(=E6=9C=AA?= =?UTF-8?q?=E9=AA=8C=E8=AF=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/cw_servo.c | 17 +++++++++ app/cw_servo.h | 20 +++++++++++ app/main.c | 97 +++++++++++++++++++++++++++----------------------- 3 files changed, 90 insertions(+), 44 deletions(-) create mode 100644 app/cw_servo.c create mode 100644 app/cw_servo.h diff --git a/app/cw_servo.c b/app/cw_servo.c new file mode 100644 index 0000000..f8132e0 --- /dev/null +++ b/app/cw_servo.c @@ -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); +} diff --git a/app/cw_servo.h b/app/cw_servo.h new file mode 100644 index 0000000..eddec90 --- /dev/null +++ b/app/cw_servo.h @@ -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 diff --git a/app/main.c b/app/main.c index d71eb23..4c034f4 100644 --- a/app/main.c +++ b/app/main.c @@ -1,57 +1,66 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library 即(CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库 -* Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是CH32V307VCT6 开源库的一部分 -* -* CH32V307VCT6 开源库 是免费软件 -* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 -* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* -* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 -* 甚至没有隐含的适销性或适合特定用途的保证 -* 更多细节请参见 GPL -* -* 您应该在收到本开源库的同时收到一份 GPL 的副本 -* 如果没有,请参阅 -* -* 额外注明: -* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 -* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 -* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 -* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) -* -* 文件名称 main -* 公司名称 成都逐飞科技有限公司 -* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 MounRiver Studio V1.8.1 -* 适用平台 CH32V307VCT6 -* 店铺链接 https://seekfree.taobao.com/ -* -* 修改记录 -* 日期 作者 备注 -* 2022-09-15 大W first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library 即(CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库 + * Copyright (c) 2022 SEEKFREE 逐飞科技 + * + * 本文件是CH32V307VCT6 开源库的一部分 + * + * CH32V307VCT6 开源库 是免费软件 + * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 + * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 + * + * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 + * 甚至没有隐含的适销性或适合特定用途的保证 + * 更多细节请参见 GPL + * + * 您应该在收到本开源库的同时收到一份 GPL 的副本 + * 如果没有,请参阅 + * + * 额外注明: + * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 + * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 + * 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 + * 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) + * + * 文件名称 main + * 公司名称 成都逐飞科技有限公司 + * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 + * 开发环境 MounRiver Studio V1.8.1 + * 适用平台 CH32V307VCT6 + * 店铺链接 https://seekfree.taobao.com/ + * + * 修改记录 + * 日期 作者 备注 + * 2022-09-15 大W first version + ********************************************************************************************************************/ #include "zf_common_headfile.h" +#include "cw_servo.h" +uint8 mt9v03x_image_cp[MT9V03X_H][MT9V03X_W]; +uint16_t pwm_cnt = 0; -int main (void) +int main(void) { - clock_init(SYSTEM_CLOCK_120M); // 初始化芯片时钟 工作频率为 120MHz - debug_init(); // 务必保留,本函数用于初始化MPU 时钟 调试串口 + clock_init(SYSTEM_CLOCK_120M); // 初始化芯片时钟 工作频率为 120MHz + debug_init(); // 务必保留,本函数用于初始化MPU 时钟 调试串口 - // 此处编写用户代码 例如外设初始化代码等 ips114_init(); - mt9v03x_init(); - // 此处编写用户代码 例如外设初始化代码等 + // mt9v03x_init(); - while(1) - { + cw_servo_init(); + + while (imu660ra_init()) {}; + + while (1) { + ips114_show_string(0, 0, "temperature"); + imu660ra_get_temperature(); + system_delay_ms(100); + ips114_show_float(0, 16, imu660ra_temperature, 3, 3); // 此处编写需要循环执行的代码 - if(mt9v03x_finish_flag){ - ips114_show_gray_image(0, 0, mt9v03x_image[0], 188, 120, 188, 120,0); + system_delay_ms(50); + if (mt9v03x_finish_flag) { + memcpy(mt9v03x_image_cp[0], mt9v03x_image[0], sizeof(mt9v03x_image) / sizeof(uint8_t)); + ips114_show_gray_image(0, 0, mt9v03x_image_cp[0], 188, 120, 188, 120, 0); } // 此处编写需要循环执行的代码 } } -