diff --git a/Example/E01_gpio_demo/.cproject b/Example/E01_gpio_demo/.cproject index 3c498e2..ee3db40 100644 --- a/Example/E01_gpio_demo/.cproject +++ b/Example/E01_gpio_demo/.cproject @@ -113,7 +113,7 @@ - + diff --git a/Example/E01_gpio_demo/libraries/doc/version.txt b/Example/E01_gpio_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E01_gpio_demo/libraries/doc/version.txt +++ b/Example/E01_gpio_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E01_gpio_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E01_gpio_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E01_gpio_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E01_gpio_demo/user/cpu0_main.c b/Example/E01_gpio_demo/user/cpu0_main.c index dae2a5b..704d8a5 100644 --- a/Example/E01_gpio_demo/user/cpu0_main.c +++ b/Example/E01_gpio_demo/user/cpu0_main.c @@ -83,8 +83,8 @@ int core0_main(void) gpio_init(KEY3, GPI, GPIO_HIGH, GPI_PULL_UP); // 初始化 KEY3 输入 默认高电平 上拉输入 gpio_init(KEY4, GPI, GPIO_HIGH, GPI_PULL_UP); // 初始化 KEY4 输入 默认高电平 上拉输入 - gpio_init(SWITCH1, GPI, GPIO_HIGH, GPI_PULL_UP); // 初始化 SWITCH1 输入 默认高电平 上拉输入 - gpio_init(SWITCH2, GPI, GPIO_HIGH, GPI_PULL_UP); // 初始化 SWITCH2 输入 默认高电平 上拉输入 + gpio_init(SWITCH1, GPI, GPIO_HIGH, GPI_PULL_UP); // 初始化 SWITCH1 输入 默认高电平 上拉输入 + gpio_init(SWITCH2, GPI, GPIO_HIGH, GPI_PULL_UP); // 初始化 SWITCH2 输入 默认高电平 上拉输入 // 此处编写用户代码 例如外设初始化代码等 cpu_wait_event_ready(); // 等待所有核心初始化完毕 diff --git a/Example/E02_uart_demo/libraries/doc/version.txt b/Example/E02_uart_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E02_uart_demo/libraries/doc/version.txt +++ b/Example/E02_uart_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.c b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.h b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E02_uart_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E02_uart_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E02_uart_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E03_adc_demo/libraries/doc/version.txt b/Example/E03_adc_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E03_adc_demo/libraries/doc/version.txt +++ b/Example/E03_adc_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.c b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.h b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E03_adc_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E03_adc_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E03_adc_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E04_pwm_demo/libraries/doc/version.txt b/Example/E04_pwm_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E04_pwm_demo/libraries/doc/version.txt +++ b/Example/E04_pwm_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E04_pwm_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E04_pwm_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E04_pwm_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E05_pit_demo/libraries/doc/version.txt b/Example/E05_pit_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E05_pit_demo/libraries/doc/version.txt +++ b/Example/E05_pit_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.c b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.h b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E05_pit_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E05_pit_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E05_pit_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E06_exit_demo/libraries/doc/version.txt b/Example/E06_exit_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E06_exit_demo/libraries/doc/version.txt +++ b/Example/E06_exit_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.c b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.h b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E06_exit_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E06_exit_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E06_exit_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E07_encoder_demo/libraries/doc/version.txt b/Example/E07_encoder_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E07_encoder_demo/libraries/doc/version.txt +++ b/Example/E07_encoder_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E07_encoder_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E07_encoder_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E07_encoder_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E08_eeprom_demo/libraries/doc/version.txt b/Example/E08_eeprom_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E08_eeprom_demo/libraries/doc/version.txt +++ b/Example/E08_eeprom_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E08_eeprom_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E08_eeprom_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E08_eeprom_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E09_timer_demo/libraries/doc/version.txt b/Example/E09_timer_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E09_timer_demo/libraries/doc/version.txt +++ b/Example/E09_timer_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.c b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.h b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E09_timer_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E09_timer_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E09_timer_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt +++ b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E10_printf_debug_log_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt +++ b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E13_dual_core_demo/libraries/doc/version.txt b/Example/E13_dual_core_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E13_dual_core_demo/libraries/doc/version.txt +++ b/Example/E13_dual_core_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E13_dual_core_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E13_dual_core_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E13_dual_core_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Example/E15_fft_demo/libraries/doc/version.txt b/Example/E15_fft_demo/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Example/E15_fft_demo/libraries/doc/version.txt +++ b/Example/E15_fft_demo/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.c b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.h b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Example/E15_fft_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Example/E15_fft_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Example/E15_fft_demo/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt index 68afc86..c4e0d0a 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt +++ b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt @@ -1,3 +1,5 @@ +V3.3.0 + 新增蓝牙串口通讯模块 V3.2.13 新增一个微秒延时函数 该延时函数为普通延时 非中断延时 V3.2.12 diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h index c0d833b..3a140e3 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h @@ -81,6 +81,7 @@ //===================================================外接设备驱动层=================================================== #include "zf_device_absolute_encoder.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_gnss.h" #include "zf_device_camera.h" diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c index 0b7cb9d..af3bb96 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_debug.h" diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h index ae0f67c..5e04a1d 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ @@ -47,27 +47,27 @@ // 定义接收FIFO大小 #define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) -// 定义示波器的最大通道数量 +// 定义示波器的最大通道数量 #define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) -// 定义参数调试的最大通道数量 +// 定义参数调试的最大通道数量 #define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) -// 定义图像边线最大数量 +// 定义图像边线最大数量 #define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) -// 单片机往上位机发送的帧头 +// 单片机往上位机发送的帧头 #define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) -// 摄像头类 +// 摄像头类 #define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) #define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) #define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) -// 上位机往单片机发送的帧头 +// 上位机往单片机发送的帧头 #define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) -// 参数设置类 +// 参数设置类 #define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c index fdade63..cc42e43 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #include "zf_common_typedef.h" @@ -38,6 +38,7 @@ #include "zf_common_debug.h" #include "zf_driver_uart.h" #include "zf_device_wireless_uart.h" +#include "zf_device_ble6a20.h" #include "zf_device_bluetooth_ch9141.h" #include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" @@ -100,6 +101,12 @@ ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_devi seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; + case SEEKFREE_ASSISTANT_BLE6A20: + { + seekfree_assistant_transfer_callback = ble6a20_send_buffer; + seekfree_assistant_receive_callback = ble6a20_read_buffer; + }break; + case SEEKFREE_ASSISTANT_CH9141: { seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h index 940b5f7..1d0158c 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 -* -* 本文件是 RT1064DVL6A 开源库的一部分 -* -* RT1064DVL6A 开源库 是免费软件 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 -* +* * 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 * 甚至没有隐含的适销性或适合特定用途的保证 * 更多细节请参见 GPL -* +* * 您应该在收到本开源库的同时收到一份 GPL 的副本 * 如果没有,请参阅 -* +* * 额外注明: * 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 * 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 @@ -24,13 +24,13 @@ * 文件名称 seekfree_assistant_interface * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.33 -* 适用平台 RT1064DVL6A +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ -* +* * 修改记录 -* 日期 作者 备注 -* 2024-1-11 SeekFree first version +* 日期 作者 备注 +* 2024-01-01 pudding first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,6 +43,7 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定 SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口 + SEEKFREE_ASSISTANT_BLE6A20, // 蓝牙转串口 SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙 SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口 SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.c new file mode 100644 index 0000000..ea8649e --- /dev/null +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.c @@ -0,0 +1,299 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20 +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + +#include "zf_common_clock.h" +#include "zf_common_debug.h" +#include "zf_common_fifo.h" +#include "zf_driver_delay.h" +#include "zf_driver_gpio.h" +#include "zf_driver_uart.h" +#include "zf_device_type.h" +#include "zf_device_ble6a20.h" + +static fifo_struct ble6a20_fifo; +static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE]; + +static uint8 ble6a20_data = 0; +#if (1 == BLE6A20_AUTO_BAUD_RATE) +static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; +static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03}; +#endif + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据 +// 参数说明 data 8bit 数据 +// 返回参数 uint32 剩余发送长度 0-发送完毕 1-未发送完成 +// 使用示例 ble6a20_send_byte(data); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_byte (const uint8 data) +{ + uint16 time_count = BLE6A20_TIMEOUT_COUNT; + while(time_count) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) + { + uart_write_byte(BLE6A20_INDEX, data); // 发送数据 + break; + } + time_count --; + system_delay_ms(1); + } + return (0 == time_count); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送数据块 +// 参数说明 *buff 发送缓冲区 +// 参数说明 len 发送数据长度 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_buffer(buff, 64); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint16 time_count = 0; + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(30 <= len) // 数据分 30byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, buff, 30); // 发送数据 + buff += 30; // 地址偏移 + len -= 30; // 数量 + time_count = 0; + } + else // 不足 30byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, buff, len); // 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送字符串 +// 参数说明 *str 要发送的字符串地址 +// 返回参数 uint32 剩余发送长度 +// 使用示例 ble6a20_send_string("Believe in yourself."); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_send_string (const char *str) +{ + zf_assert(NULL != str); + uint16 time_count = 0; + uint32 len = strlen(str); + while(0 != len) + { + if(!gpio_get_level(BLE6A20_RTS_PIN)) // 如果RTS为低电平 则继续发送数据 + { + if(128 <= len) // 数据分 128byte 每包发送 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // 发送数据 + str += 128; // 地址偏移 + len -= 128; // 数量 + time_count = 0; + } + else // 不足 128byte 的数据一次性发送完毕 + { + uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// 发送数据 + len = 0; + break; + } + } + else // 如果RTS为高电平 则模块忙 + { + if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // 超出了最大等待时间 + { + break; // 退出发送 + } + system_delay_ms(1); + } + } + return len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 发送摄像头图像至上位机查看图像 +// 参数说明 *image_addr 需要发送的图像地址 +// 参数说明 image_size 图像的大小 +// 返回参数 void +// 使用示例 ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size) +{ + zf_assert(NULL != image_addr); + extern uint8 camera_send_image_frame_header[4]; + ble6a20_send_buffer(camera_send_image_frame_header, 4); + ble6a20_send_buffer((uint8 *)image_addr, image_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 读取缓冲区数据 +// 参数说明 *buff 接收缓冲区 +// 参数说明 len 读取数据长度 +// 返回参数 uint32 实际读取数据长度 +// 使用示例 ble6a20_read_buffer(buff, 32); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len) +{ + zf_assert(NULL != buff); + uint32 data_len = len; + fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN); + return data_len; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 串口中断回调函数 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_callback(); +// 备注信息 该函数在 ISR 文件 串口中断程序被调用 +// 由串口中断服务函数调用 wireless_module_uart_handler() 函数 +// 再由 wireless_module_uart_handler() 函数调用本函数 +//------------------------------------------------------------------------------------------------------------------- +void ble6a20_callback (void) +{ + if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data)) + { + fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1); +#if BLE6A20_AUTO_BAUD_RATE // 开启自动波特率 + if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo)) + { + uint32 ble6a20_auto_baud_count = 3; + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK; + fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN); + } +#endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 蓝牙转串口模块 初始化 +// 参数说明 void +// 返回参数 void +// 使用示例 ble6a20_init(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +uint8 ble6a20_init (void) +{ + uint8 return_state = 0; + + // 等待模块初始化 + system_delay_ms(50); + + set_wireless_type(BLE6A20, ble6a20_callback); + + fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE); + gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP); +#if(0 == BLE6A20_AUTO_BAUD_RATE) // 关闭自动波特率 + // 本函数使用的波特率为115200 为蓝牙转串口模块的默认波特率 如需其他波特率请自行配置模块并修改串口的波特率 + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); +#elif(1 == BLE6A20_AUTO_BAUD_RATE) // 开启自动波特率 + uint8 rts_init_status = 0; + + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT; + ble6a20_auto_baud_data[0] = 0; + ble6a20_auto_baud_data[1] = 1; + ble6a20_auto_baud_data[2] = 3; + + rts_init_status = gpio_get_level(BLE6A20_RTS_PIN); + gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // 初始化流控引脚 + + uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // 初始化串口 + uart_rx_interrupt(BLE6A20_INDEX, 1); + + system_delay_ms(5); // 模块上电之后需要延时等待 + gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS引脚拉高,进入自动波特率模式 + system_delay_ms(100); // RTS拉高之后必须延时20ms + gpio_toggle_level(BLE6A20_RTS_PIN); // RTS引脚取反 + + do + { + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START; + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // 发送特定数据 用于模块自动判断波特率 + uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // 发送特定数据 用于模块自动判断波特率 + system_delay_ms(20); + + if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // 检验自动波特率是否完成 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + + if( 0xa5 != ble6a20_auto_baud_data[0] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[1] && // 检验自动波特率是否正确 + 0xff != ble6a20_auto_baud_data[2] ) // 检验自动波特率是否正确 + { + return_state = 1; // 如果程序进入到此语句内 说明自动波特率失败了 + break; + } + ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS; + + gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // 初始化流控引脚 + system_delay_ms(10); // 延时等待 模块准备就绪 + }while(0); +#endif + return return_state; +} diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h new file mode 100644 index 0000000..c037ea2 --- /dev/null +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h @@ -0,0 +1,108 @@ +/********************************************************************************************************************* +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 +* Copyright (c) 2022 SEEKFREE 逐飞科技 +* +* 本文件是 TC264 开源库的一部分 +* +* TC264 开源库 是免费软件 +* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 +* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 +* +* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证 +* 甚至没有隐含的适销性或适合特定用途的保证 +* 更多细节请参见 GPL +* +* 您应该在收到本开源库的同时收到一份 GPL 的副本 +* 如果没有,请参阅 +* +* 额外注明: +* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本 +* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中 +* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件 +* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明) +* +* 文件名称 zf_device_ble6a20.h +* 公司名称 成都逐飞科技有限公司 +* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 +* 开发环境 ADS v1.9.20 +* 适用平台 TC264D +* 店铺链接 https://seekfree.taobao.com/ +* +* 修改记录 +* 日期 作者 备注 +* 2024-07-02 pudding first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* 接线定义: +* ------------------------------------ +* 模块管脚 单片机管脚 +* RX 查看 zf_device_ble6a20.h 中 BLE6A20_RX_PIN 宏定义 +* TX 查看 zf_device_ble6a20.h 中 BLE6A20_TX_PIN 宏定义 +* RTS 查看 zf_device_ble6a20.h 中 BLE6A20_RTS_PIN 宏定义 +* VCC 3.3V电源 +* GND 电源地 +* 其余引脚悬空 +* ------------------------------------ +*********************************************************************************************************************/ + + +#ifndef _zf_device_ble6a20_h_ +#define _zf_device_ble6a20_h_ + +#include "zf_common_typedef.h" + + +//=================================================定义 蓝牙串口 基本配置================================================ + +#define BLE6A20_INDEX (UART_2) // 蓝牙串口对应使用的串口号 +#define BLE6A20_BUAD_RATE (115200) // 蓝牙串口对应使用的串口波特率 + // 波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 +#define BLE6A20_TX_PIN (UART2_RX_P10_6) // 蓝牙串口对应模块的 TX 要接到单片机的 RX +#define BLE6A20_RX_PIN (UART2_TX_P10_5) // 蓝牙串口对应模块的 RX 要接到单片机的 TX +#define BLE6A20_RTS_PIN (P10_2) // 蓝牙串口对应模块的 RTS 引脚 + +#define BLE6A20_BUFFER_SIZE ( 64 ) // 蓝牙串口缓冲区大小 +#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // 蓝牙串口通讯超时范围 + +// ------------------------------------ 自动波特率 ------------------------------------ +// 注意事项1:开启自动波特率务必连接RTS引脚 否则会开启失败。 +// 注意事项2:模块自动波特率失败的话 可以尝试断电重启 + +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 +// 开启自动波特率务必阅读上面两条 注意事项 + +// 0:关闭自动波特率 +// 1:开启自动波特率 自动波特率的作用是修改 BLE6A20_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率 +// 自动波特率仅支持 9600 57600 115200 230400 460800 921600 1500000 2000000 + +#define BLE6A20_AUTO_BAUD_RATE ( 0 ) + +#if (1 == BLE6A20_AUTO_BAUD_RATE) +typedef enum +{ + BLE6A20_AUTO_BAUD_RATE_SUCCESS, + BLE6A20_AUTO_BAUD_RATE_INIT, + BLE6A20_AUTO_BAUD_RATE_START, + BLE6A20_AUTO_BAUD_RATE_GET_ACK, +}ble6a20_auto_baudrate_state_enum; +#endif +// ------------------------------------ 自动波特率 ------------------------------------ + +//=================================================定义 蓝牙串口 基本配置================================================ + + +//=================================================声明 蓝牙串口 基础函数================================================ +uint32 ble6a20_send_byte (const uint8 data); // 蓝牙转串口模块 发送数据 +uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // 蓝牙转串口模块 发送数据块 +uint32 ble6a20_send_string (const char *str); // 蓝牙转串口模块 发送字符串 +void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // 蓝牙转串口模块 发送摄像头图像至上位机查看图像 + +uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // 蓝牙转串口模块 读取缓冲区数据 + +void ble6a20_callback (void); // 蓝牙转串口模块 串口中断回调函数 + +uint8 ble6a20_init (void); // 蓝牙转串口模块 初始化 +//=================================================声明 蓝牙串口 基础函数================================================ + +#endif diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h index 6c2b8da..4f8ec53 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h @@ -54,6 +54,7 @@ typedef enum { NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 + BLE6A20, // 蓝牙串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 WIFI_UART, // 串口 WiFi RECEIVER_UART, // 枪式遥控器 diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/澶栬鏂囦欢璇存槑.txt b/Seekfree_TC264_Opensource_Library/libraries/zf_device/澶栬鏂囦欢璇存槑.txt new file mode 100644 index 0000000..1c96965 --- /dev/null +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/澶栬鏂囦欢璇存槑.txt @@ -0,0 +1,97 @@ + +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ +如需获取详细资料可联系淘宝店铺客服:https://seekfree.taobao.com/ + +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 +本文件主要用于说明 zf_device 目录下各个文件所对应的外设模块 + + +=================================================== 测距模块 =================================================== + +zf_device_dl1a.h TOF 测距模块 DL1A 频率:33hz 最大距离:1.2 米 + +zf_device_dl1b.h TOF 测距模块 DL1B 频率:100hz 最大距离:1.4 米 + +=================================================== 测距模块 =================================================== + + + +==================================================== 陀螺仪 ==================================================== + +zf_device_mpu6050.h MPU6050 六轴陀螺仪 传统 IIC 通讯 + +zf_device_icm20602.h ICM20602 六轴陀螺仪 支持 SPI 采值 + +zf_device_imu660ra.h IMU660RA 六轴陀螺仪 高精度陀螺仪 + +zf_device_imu963ra.h IMU963RA 九轴陀螺仪 支持地磁计采集 + +==================================================== 陀螺仪 ==================================================== + + + +=================================================== 屏幕显示 =================================================== + +zf_device_ips114.h IPS114 液晶屏幕 1.14 寸 分辨率:240 * 135 + +zf_device_ips200.h IPS200 液晶屏幕 2.0 寸 分辨率:240 * 320 + +zf_device_tft180.h TFT180 屏幕 1.8寸 分辨率:160 * 128 + +zf_device_oled.h OLED 液晶屏幕 0.96 寸 分辨率:128 * 64 + +=================================================== 屏幕显示 =================================================== + + + +================================================== 图像传感器 ================================================== + +zf_device_mt9v03x.h MT9V03X 总钻风灰度摄像头 + +zf_device_ov7725.h OV7725 小钻风硬件二值化摄像头 + +zf_device_scc8660.h SCC8660 凌瞳彩色摄像头 + +zf_device_tsl1401.h TSL1401 红孩儿线阵CCD + +================================================== 图像传感器 ================================================== + + + +=================================================== 无线通讯 =================================================== + +zf_device_ble6a20.h 蓝牙串口模块 无线通讯 + +zf_device_bluetooth_ch9141.h CH9141 蓝牙通讯模块 蓝牙组网通讯 + +zf_device_wifi_spi.h WIFI-SPI 高速WIFI无线通讯模块 + +zf_device_wifi_uart.h WIFI-UART 串口WIFI无线通讯模块 + +zf_device_wireless_uart.h 无线串口模块 + +=================================================== 无线通讯 =================================================== + + + +=================================================== 远程遥控 =================================================== + +zf_device_uart_receiver.h SUBS 串口遥控器 串口通讯 长距离遥控 2.4G频段 + +=================================================== 远程遥控 =================================================== + + + +================================================== 其他传感器 ================================================== + +zf_device_absolute_encoder.h 360° 位置传感器 绝对式迷你 mini 编码器 分辨率:0.088° + +zf_device_gnss.h GPS 及 RTK 定位模块 双频高精度定位模块 亚米级定位 + +zf_device_key.h GPIO 按键驱动 用于检测主板按键状态 + +zf_device_virtual_oscilloscope.h VisualScope 虚拟示波器 + +================================================== 其他传感器 ================================================== \ No newline at end of file diff --git a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c index 06c540d..c8dd53d 100644 --- a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c +++ b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c @@ -40,7 +40,6 @@ // 本例程是开源库空工程 可用作移植或者测试各类内外设 // 本例程是开源库空工程 可用作移植或者测试各类内外设 - // **************************** 代码区域 **************************** int core0_main(void) { @@ -59,7 +58,6 @@ int core0_main(void) - // 此处编写需要循环执行的代码 } } diff --git a/Seekfree_TC264_Opensource_Library/user/isr.c b/Seekfree_TC264_Opensource_Library/user/isr.c index 125f6d4..17000a4 100644 --- a/Seekfree_TC264_Opensource_Library/user/isr.c +++ b/Seekfree_TC264_Opensource_Library/user/isr.c @@ -135,7 +135,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // 开启中断嵌套