Skip to content

Commit

Permalink
feature: lms uart communicate sucessful
Browse files Browse the repository at this point in the history
  • Loading branch information
archeno committed Oct 24, 2024
1 parent 804e317 commit f61f9f0
Show file tree
Hide file tree
Showing 21 changed files with 2,790 additions and 1,988 deletions.
3 changes: 2 additions & 1 deletion .config
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ CONFIG_RT_ALIGN_SIZE=8
CONFIG_RT_THREAD_PRIORITY_32=y
# CONFIG_RT_THREAD_PRIORITY_256 is not set
CONFIG_RT_THREAD_PRIORITY_MAX=32
CONFIG_RT_TICK_PER_SECOND=100
CONFIG_RT_TICK_PER_SECOND=1000
CONFIG_RT_USING_OVERFLOW_CHECK=y
CONFIG_RT_USING_HOOK=y
CONFIG_RT_HOOK_USING_FUNC_PTR=y
Expand Down Expand Up @@ -1121,6 +1121,7 @@ CONFIG_BSP_USING_HWTIMER1=y
CONFIG_BSP_USING_HWTIMER2=y
CONFIG_BSP_USING_HWTIMER3=y
CONFIG_BSP_USING_HWTIMER4=y
CONFIG_BSP_USING_HWTIMER6=y
# CONFIG_BSP_USING_ONCHIP_RTC is not set
CONFIG_BSP_USING_WDT=y
# CONFIG_BSP_USING_SDIO is not set
Expand Down
7 changes: 4 additions & 3 deletions .config.old
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ CONFIG_RT_ALIGN_SIZE=8
CONFIG_RT_THREAD_PRIORITY_32=y
# CONFIG_RT_THREAD_PRIORITY_256 is not set
CONFIG_RT_THREAD_PRIORITY_MAX=32
CONFIG_RT_TICK_PER_SECOND=100
CONFIG_RT_TICK_PER_SECOND=1000
CONFIG_RT_USING_OVERFLOW_CHECK=y
CONFIG_RT_USING_HOOK=y
CONFIG_RT_HOOK_USING_FUNC_PTR=y
Expand Down Expand Up @@ -130,9 +130,9 @@ CONFIG_RT_CAN_USING_HDR=y
CONFIG_RT_USING_HWTIMER=y
# CONFIG_RT_USING_CPUTIME is not set
CONFIG_RT_USING_I2C=y
CONFIG_RT_I2C_DEBUG=y
# CONFIG_RT_I2C_DEBUG is not set
CONFIG_RT_USING_I2C_BITOPS=y
CONFIG_RT_I2C_BITOPS_DEBUG=y
# CONFIG_RT_I2C_BITOPS_DEBUG is not set
# CONFIG_RT_USING_PHY is not set
CONFIG_RT_USING_PIN=y
CONFIG_RT_USING_ADC=y
Expand Down Expand Up @@ -1121,6 +1121,7 @@ CONFIG_BSP_USING_HWTIMER1=y
CONFIG_BSP_USING_HWTIMER2=y
CONFIG_BSP_USING_HWTIMER3=y
CONFIG_BSP_USING_HWTIMER4=y
CONFIG_BSP_USING_HWTIMER6=y
# CONFIG_BSP_USING_ONCHIP_RTC is not set
CONFIG_BSP_USING_WDT=y
# CONFIG_BSP_USING_SDIO is not set
Expand Down
1 change: 1 addition & 0 deletions .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"defines": [
"_DEBUG",
"UNICODE",
"GD32F425",
"_UNICODE"
],
"intelliSenseMode": "gcc-arm",
Expand Down
12 changes: 9 additions & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,14 @@
"drv_usart.h": "c",
"rthw.h": "c",
"gd32f4xx_gpio.h": "c",
"cmath": "c"
"cmath": "c",
"lms.h": "c",
"lmsuart.h": "c"
},
"cortex-debug.variableUseNaturalFormat": true,
"idf.portWin": "COM5"
"editor.formatOnSave": true,
"files.trimFinalNewlines": true, // 删除文件末尾多余的空行
"files.trimTrailingWhitespace": true, // 删除行末尾的多余空白字符
"cortex-debug.variableUseNaturalFormat": false,
"idf.portWin": "COM5",
"C_Cpp.autocomplete": "default"
}
8 changes: 4 additions & 4 deletions applications/dma_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
#define UART_NAME "uart3"
static rt_uint8_t send_str[20] = "hello";
static rt_device_t serial;
rt_thread_t thread_uart;
rt_thread_t thread_uart;
static void uart_thread_entry(void *param)
{
while(1)
while (1)
{
rt_device_write(serial, 0, send_str, strlen(send_str));
rt_thread_mdelay(1000);
Expand All @@ -24,9 +24,9 @@ int uart_dma_test(void)
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
config.baud_rate = BAUD_RATE_9600;
rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);
LOG_I("enter uar_dma_test");
LOG_I("enter uar_dma_test");
ret = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
if( ret != RT_EOK)
if (ret != RT_EOK)
{
LOG_I("open serial %s failed ret is %d", UART_NAME, ret);
}
Expand Down
49 changes: 49 additions & 0 deletions applications/inc/lms.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* LMS.h
*
* Created: 2016/11/18 9:08:30
* Author: Administrator
*/
#ifndef LMS_H_
#define LMS_H_
#include "stdint.h"
typedef uint8_t BYTE;
typedef uint16_t WORD;

#define MaxLMSNumInGroupe 30 //在一个组内配置LMS的最大个数
//TC1电流宽度
#define MaxCaptureCurWidth_ms 19.5f //unit:ms
#define MinCaptureCurWidth_ms 9.5f //unit:ms

#define TStd 0.0001f //Unit:Second,100us
#define PowerHalfCycle_ms (1000/(PowerFreq*2))
//
// BYTE gSampleCTC=0;
// //
// BYTE gLMSType=0; //gLMSType=0x00=SIU,gLMSType=0x01=LMS
//******************通信接收*******************//
//1.帧定义
//同步帧LS/SS(8bit,含3bit校验位) : startBit(1) g2g1g0(3bit/组号) ID(1bit/1=LS,0=SS) ccc(3bit)
//命令帧LS (16bit,含4bit校验位) :startBit(1) ConsegmentAddr(7bit),
// OrderCode(4bit) CRC4(4bit).
//调制器LS OrderCode(4bit)
#define ProgData0_Order 0x00 //SCM发送数据为ProgData0编程数据
#define ProgData1_Order 0x01 //SCM发送数据为ProgData1编程数据
#define OpenLamp_Order 0x02 //SCM发送数据为LMS关灯
#define CloseLamp_Order 0x03 //SCM发送数据为LMS亮灯

#define FlashSync_Order 0x04

#define Intensity0_Order 0x05
#define Intensity1_Order 0x06
#define Intensity2_Order 0x07
#define Intensity3_Order 0x08
#define Intensity5_Order 0x09


#define SHORT_CMD 0X00
#define LONG_CMD 0X01

BYTE GenSyncFrame(BYTE byGroupNo,BYTE IDType);
BYTE crc4_itu(BYTE * message,BYTE length);
#endif /* LMS_H_ */
64 changes: 64 additions & 0 deletions applications/inc/lmsuart.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#ifndef __LMSUART_H__
#define __LMSUART_H__

#include "stdint.h"
#include "gd32f4xx.h"
typedef enum
{
STATE_TX_SS, // 检测到过零信号,延时2.5ms进入发送态(有命令则发送命令,没有则发送同步命令)
STATE_TX_LS, // 发送长命令
} Send_State_E;
typedef enum
{
STATE_INIT, // 初始阶段,等待同步信号进入发送态
STATE_TX, // 发送状态,启动发送延时定时器,具体发送过程在发送延时定时器回调中执行
STATE_WAITRCV, // 等待3个过零信号读取第一个
STATE_RECVING, // 接收状态
} LMS_STATE_E;

#define TERMIANL_NUM 32 // 终端数量
#define WAIT_CROSS_CNT 2 // 发送后经过两个过零脉冲,第三个过零脉冲开始接收数据
#define TX_DELAY_US (2.5 * 1000) // 2.5US

typedef struct
{
uint8_t group_id; // 控制组号
uint8_t seg_id; // 控制段号
uint8_t write_lock; // 接收到命令后写锁=1,当锁定时=1,禁止修改信息,发送完成后解锁=0
uint8_t cmd_data[3]; // 待发送的命令
uint8_t cmd_toSend; // 待发送的命令关灯/开灯。
uint8_t cmd_current_send_index; // 当前发送的字节索引(0~2)

} cmd_t;
typedef struct
{
LMS_STATE_E state;
Send_State_E send_state;
cmd_t cmd_info;
uint8_t waitToRecvicntLeft; // 等待接收过零计数 //默认为3
uint8_t terminal_index; // 正在接收的终端索引0~31(32个)
uint8_t terminalState[TERMIANL_NUM]; // ff:无应答 0x00: 灯正常/SIU已激活且正常 0x0b:灯故障/已激活电源故障
// 0x74: 未激活 0x7f: 检测到飞机
uint8_t polling_complete_flag; // 巡检完成标志
} lms_t;
extern lms_t g_lms;

void lms_set_send_cmd(uint8_t cmd);
void lms_uart_send_byte(uint8_t data);
/**
* @brief can接收到服务器控制命令后,写入数据到cmd_info,等待发送
*
* 如果cmd_info.write_lock =1 表示数据还没有发送完,丢弃本次命令,否则则写入命令
*/
void build_ctrl_cmd(uint8_t group_id, uint8_t seg_id, uint8_t cmd);
void lms_init(lms_t *lms);
void lms_uart_send_byte(uint8_t byte);
/**
* @brief 从串口接收一个字节数据
*
* @return uint8_t 接收数据:如果有数据返回接收数据,没有返回0xff
*/
uint8_t lms_uart_recv_byte();
void send_state_machine(lms_t *lms);
void lms_state_machine(lms_t *lms);
#endif
4 changes: 4 additions & 0 deletions applications/inc/rs_485.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ extern "C"{
#include <rtdevice.h>
#include <stdint.h>
#define USART0_DR_PIN GET_PIN(A, 7)
#define USART2_DR_PIN GET_PIN(A, 1)

typedef enum{
RS_485_UART0=0,
RS_485_UART2,
Expand All @@ -16,6 +18,8 @@ typedef enum{

#define USART0_SEND_MODE() rt_pin_write(USART0_DR_PIN, PIN_HIGH)
#define USART0_RECV_MODE() rt_pin_write(USART0_DR_PIN, PIN_LOW)
#define USART2_SEND_MODE() rt_pin_write(USART2_DR_PIN, PIN_HIGH)
#define USART2_RECV_MODE() rt_pin_write(USART2_DR_PIN, PIN_LOW)

int rs_485_send_data(RS_485_PORT port, uint8_t *buf, int len);
int rs_485_receive(RS_485_PORT port, uint8_t *buf, int bufsz, int timeout, int bytes_timeout);
Expand Down
Loading

0 comments on commit f61f9f0

Please sign in to comment.