Files
hpw421/project/example/ble/ble_peripheral/app/src/uart.c
T
2026-06-25 10:32:06 +08:00

190 lines
4.3 KiB
C

/*!
* \file uart.c
*
* \brief Target uart implementation
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
*
* _ __ _ ________ _
* | |/ /(_)___ / ____/ /_ (_)___
* | // / __ \/ / / __ \/ / __ \
* / |/ / / / / /___/ / / / / /_/ /
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
* /_/
* (C) 2022-2025 XinChip
*
* \endcode
*
* \author ( XinChip ) Alex-J
*
* \author ( XinChip )
*/
/*-----------------------------------------------------------------------------------
INCLUDE HEADE FILES
------------------------------------------------------------------------------------*/
#include "uart.h"
#include "xc_drv_uart.h"
#include "timer.h"
#include "RF433.h"
#include "pwm.h"
#include "xc_drv_pwm.h"
#include "rgblight.h"
#include "mode.h"
#include "timer.h"
#include "math.h"
#include "timeslice.h"
/*------------------------------------------------------------------------------------
Macros
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Global Variables
-------------------------------------------------------------------------------------*/
uint8_t only_read_charactertics_buffer[5];
uint8_t only_read_charactertics_buffer_length = 5;
ring_buffer_t uart0_ring_buff;
uint8_t buffer[5] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
uint8_t uart0_buff[UART0_BUFFER_LEN];
extern bool buffer_complet_flag;
//
void uart_receive_cb(uint8_t *buff, uint16_t len)
{
// static uint8_t cnt = 0;
// for (int i = 0; i < len; i++) {
// // uart_user_ctl.r_buff[cnt++] = buff[i];
// // uart_user_ctl.r_len++;
// ring_buffer_queue(&uart0_ring_buff, buff[i]);
// }
// // if (cnt == sizeof(uart_user_ctl.r_buff))
// {
// //uart_user_ctl.rx_done = true;
// cnt = 0;
// }
}
bool xc_is_data_ready()
{
}
void scan_uar_data(uint8_t *frame){
}
uint8_t rx_date;
uint8_t receive_mode=0;
void scan_uart(uint8_t *arr)
{
uint8_t uart_handle = UART0_IDX;
buffer_complet_flag=false;
// 组帧:帧头 + 数据 + 校验
uint8_t user_rx_buf[6]; // 1字节帧头 + 4字节数据 + 1字节校验位
user_rx_buf[0] = 0xAA; // 帧头标志
for (uint8_t i = 0; i < 4; i++)
{
user_rx_buf[1 + i] = arr[i]; // 填充数据
}
// 校验位:简单累加校验
uint8_t checksum = 0;
for (uint8_t i = 0; i < 5; i++) // 帧头和数据
{
checksum += user_rx_buf[i];
}
user_rx_buf[5] = checksum; // 校验位
switch(user_rx_buf[4])
{
case 0x01:
switch(user_rx_buf[1])
{
case 0x01:
xc_gpio_toggle_pin(GPIO_5);
flash_ch1_state=xc_gpio_read_pin(GPIO_5);
set_TaskComps_timer(6,1000);
break;
default:break;
}
break;
case 0x02:
switch(user_rx_buf[1])
{
case 0x05:
receive_mode=2;
break;
case 0x07:
receive_mode=4;
break;
default:break;
}
break;
}
// switch(user_rx_buf[4])
// {
// case 0x01:
// xc_gpio_toggle_pin(GPIO_5);
// break;
// case 0x02:
// xc_gpio_toggle_pin(GPIO_18);
// break;
// case 0x03:
// xc_gpio_toggle_pin(GPIO_19);
// break;
// }
}
void scan_uart_ota(uint8_t *arr){
// uint8_t uart_handle = UART0_IDX;
// buffer_complet_flag = false; // 清除标志
// xc_uart_send_data(uart_handle, arr,139); // 发送完整帧
}
void scan_uart_usr(uint8_t *arr){
// uint8_t uart_handle = UART0_IDX;
// buffer_complet_flag = false; // 清除标志
// xc_uart_send_data(uart_handle, arr,arr[1]); // 发送完整帧
}