Commit ad0e6a3c by zhanggf

[Cyton] 500hz wifi debug ok.

Signed-off-by: zhanggf <zhanggf@example.com>
parent d272b692
Output/*
*.o
......@@ -6,6 +6,8 @@
"esp8266.h": "c",
"usart.h": "c",
"cyton_process.h": "c",
"cyton_datapkg.h": "c"
"cyton_datapkg.h": "c",
"ADS129x.C": "cpp",
"ADS129x.H": "cpp"
}
}
\ No newline at end of file
......@@ -30,7 +30,7 @@ _ADS129x_info ADS129x_info;//芯片结构
#if ADS129X_DEVICE == ADS1299
u8 ADS129x_REG_BUF[ADS129X_REGNUM]={ //ads129x寄存器数组
0x3e,//ID ads1299 xx11 1110
0xD5,//CONFIG1 1101 0110 关CLK时钟输出 0Xn1 8KSPS 0Xn2 4K 0Xn3 2K 0Xn4 1K 0Xn5 500SPS 0Xn6 250SPS
0xD5,//CONFIG1 1101 0110 关CLK时钟输出 0Xn1 8KSPS 0XD2 4K 0XD3 2K 0XD4 1K 0XD5 500SPS 0XD6 250SPS
0xD0,//CONFIG2 1101 0000 方波幅值(VREFP–VREFN)/2400=±3.75mV 增益24 实际测到的电压±90mV 权值 4500000uV/8838606 = 0.537uV
0xEC,//CONFIG3 1110 110x 开内部基准电压4.5V 开右腿驱动放大器, ,内部1/2vref基准,关闭右腿测量和右腿导联脱落检测
0x00,//LOFF //关闭导联脱落检测相关
......@@ -215,9 +215,11 @@ void ADS129x_GPIO_Init(void)
ADS129X_RST=1; //取消复位
}
int iIndex = 0;
void EXTI0_IRQHandler(void)
{
int iRet = -3;
if( EXTI->IMR&ADS129X_DRDY_LINE && ADS129X_DRDY==0)//数据接收中断
{
//__disable_irq();
......@@ -234,8 +236,9 @@ void EXTI0_IRQHandler(void)
}
else if(work_state == SEND_WIFI )
{
if(queue_data_push(WIFI_Info->WIFI_Queue ,ADS129x_info.ads129x_Cache+3 ,ADS129x_info.Ads129x_Data_Move,ADS129x_info.Ads129x_Write_Num))
{
iRet = queue_data_push(WIFI_Info->WIFI_Queue ,ADS129x_info.ads129x_Cache+3 ,ADS129x_info.Ads129x_Data_Move,ADS129x_info.Ads129x_Write_Num);
if(iRet) {
}
}
......@@ -247,6 +250,7 @@ void EXTI0_IRQHandler(void)
{
}
/////////////////////////////////////////////////////////////////////////////////////////////////
EXTI_ClearITPendingBit(ADS129X_DRDY_LINE); //清除LINE上的中断标志位
//__enable_irq();
......@@ -404,11 +408,24 @@ u8 ADS129x_REG_Init(void)
}
static g_szADS129x_Hz[ADS129X_CMD_UNKNOWN] = {
//0XD1 8KSPS 0XD2 4K 0XD3 2K 0XD4 1K 0XD5 500SPS 0XD6 250SPS
0xD6, 0xD5, 0xD4, 0xD3, 0xD2, 0XD1
};
static uint8_t aDS129x_getHz(int iHz)
{
if (iHz >= ADS129X_CMD_UNKNOWN) {
iHz = ADS129X_CMD_8000HZ;
}
return g_szADS129x_Hz[iHz];
}
//初始化
//输入cmd: 0蓝牙或串口发送 / 1 wifi发送/ 2 TF卡存储
void ADS129x_ReInit(u8 cmd)
void ADS129x_ReInit(u8 cmd, int iHz)
{
u8 res;
u8 RL_temp=0;
......@@ -422,6 +439,13 @@ void ADS129x_ReInit(u8 cmd)
ADS129x_REG_BUF[13] = RL_temp; //设置右腿驱动
ADS129x_REG_BUF[14] = RL_temp;
//初始化129X
#if ADS129X_DEVICE == ADS1299
ADS129x_REG_BUF[1]= aDS129x_getHz(iHz); //1000采样率
#elif ADS129X_DEVICE == ADS1298
ADS129x_REG_BUF[1]=0x85; //1000采样率
#endif
///////////////////////////////////////////////////////////////////////////
while(ADS129x_REG_Init())//初始化寄存器
{
......@@ -455,10 +479,14 @@ void ADS129x_ReInit(u8 cmd)
//ADS129x_info.Ads129x_Write_Num = SD_QUEUE_LENGTH/ADS129x_info.Ads129x_Data_Move ; //搬运N次做一个包
//Main_printf("搬运 %d 次做一个包\r\n",ADS129x_info.Ads129x_Write_Num);
}
}
EXTI->IMR |= ADS129X_DRDY_LINE;//开DRDY中断
}
void ADS129x_Stop()
{
ADS129x_Send_CMD(ADS129X_STOP);
}
/*功能:把采到的3个字节转成有符号32位数 */
s32 get_volt(u32 num)
......
......@@ -103,9 +103,20 @@ extern u8 ADS129x_REG_BUF[ADS129X_REGNUM];//ads1299寄存器数组
/////////////////////////////////////////////////////////////////////////////////////////////
s32 get_volt(u32 num);//把采到的3个字节转成有符号32位数
typedef enum tagAds129x_Cmd_Hz {
ADS129X_CMD_250HZ = 0,
ADS129X_CMD_500HZ,
ADS129X_CMD_1000HZ,
ADS129X_CMD_2000HZ,
ADS129X_CMD_4000HZ,
ADS129X_CMD_8000HZ,
ADS129X_CMD_UNKNOWN,
} ADS129X_CMD_HZ_E;
void ADS129x_GPIO_Init(void); //初始化ADS1292引脚
void ADS129x_ReInit(u8 cmd);//重复初始化
void ADS129x_ReInit(u8 cmd, int iHz);//重复初始化
u8 ADS129x_SPI_ReadWriteByte(u8 com); //SPI通信
void ADS129x_Stop();
__INLINE void ADS129x_Read_Data(void);//72M时钟下函数耗时大约10us 8M时钟下 函数耗时大约 100us
......
......@@ -264,6 +264,11 @@ int CytonEsp12_StreamStat()
return g_stCytron_DevSeting.aucStreamStat;
}
void CytonEsp12_SetStreamStat(int iStat)
{
g_stCytron_DevSeting.aucStreamStat = iStat;
}
int CytonEsp12_GetCurrentRate()
{
int iRate = g_stCytron_DevSeting.aucRate;
......
......@@ -30,5 +30,6 @@ void Ctron_Esp12Data_Send(int iFd, uint8_t *szData, int iLen, int iClose);
int CytonEsp12_DataGetReportFd();
int CytonEsp12_StreamStat();
int CytonEsp12_GetCurrentRate();
void CytonEsp12_SetStreamStat(int iStat);
#endif
......@@ -12,7 +12,10 @@
#include "myQueue.h"
#define CYTON_COLLECTOR_DATA_CACHE_LEN (4096)
#define CYTON_COLLECTOR_DATA_CACHE_LEN (123)
static int g_iTimerindex = 0;
static int g_iTotalLen = 0;
typedef struct stCyton_DataCacheInfo {
uint8_t DataCache[CYTON_COLLECTOR_DATA_CACHE_LEN + 1];
......@@ -69,6 +72,7 @@ void CytonProcess_TimerCollCB(int iTIndex)
{
int iRet = 0;
uint32_t puiChannel[8];
g_iTimerindex = iTIndex;
//ESP8266_DEBUG("CytonProcess_TimerCollCB %d\n", iTIndex);
iRet = Cyton_DataFormat2Package(&g_stCyton_DataCache.DataCache[g_stCyton_DataCache.iWriteIndex], puiChannel, CYTON_DATA_PKG_CHANNEL8);
......@@ -107,13 +111,18 @@ void CytonProcess_Loop()
iFd = CytonEsp12_DataGetReportFd();
iStreamStat = CytonEsp12_StreamStat();
if (iFd >= 0 && iStreamStat) {
if (iStreamStat) {
pszSendBuf = cyton_getUnsendData(&iSendBufLen);
if (NULL != pszSendBuf) {
ESP8266_DEBUG("Start Report Data %d\n", iSendBufLen);
Ctron_Esp12Data_Send(iFd, pszSendBuf, iSendBufLen, 0);
ESP8266_DEBUG("Start Report Data End\n");
g_iTotalLen += iSendBufLen;
ESP8266_SendData(pszSendBuf, iSendBufLen);
// ESP8266_SendData(iFd, pszSendBuf, iSendBufLen, 0);
ESP8266_DEBUG("Start Report Data iSendBufLen %d\n", iSendBufLen);
cyton_setSendDataDone(iSendBufLen);
}
if (g_iTimerindex % 1000 == 0) {
ESP8266_DEBUG("Start Report total %d\n", g_iTotalLen);
}
}
}
\ No newline at end of file
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cyton_cmd_pub.h"
#include "cJSON.h"
#ifdef ESP_8266
typedef struct stCytron_DevSeting {
unsigned char aucRate;
unsigned char aucStreamStat;
} CYTON_DEVSETING_T;
static CYTON_DEVSETING_T g_stCytron_DevSeting;
static int g_iOpenguiPort = -1;
static char g_szOpenguiIP[16] = {0};
static char g_szCmdBuf[64] = {0};
#define toNet32(A) ((( (unsigned int)(A) & 0xff000000) >> 24) | \
(( (unsigned int)(A) & 0x00ff0000) >> 8) | \
(( (unsigned int)(A) & 0x0000ff00) << 8) | \
(( (unsigned int)(A) & 0x000000ff) << 24))
static int Ctron_atoi(char *szData, int iLen)
{
//0,11:123456711
unsigned char szTmp[4] = {0};
if (iLen > 4) {
return -1;
}
strncpy((char *)szTmp, (char *)szData, iLen);
return atoi((char *)szTmp);
}
int Cyton_GetCurrentRate(int iRate)
{
int iRet = 1000;
switch(iRate) {
case 0:
iRet = 16000;
break;
case 1:
iRet = 8000;
break;
case 2:
iRet = 4000;
break;
case 3:
iRet = 2000;
break;
case 4:
iRet = 1000;
break;
case 5:
iRet = 500;
case 6:
iRet = 250;
break;
default:
break;
}
return iRet;
}
/*
A = 5MIN
S = 15MIN
F = 30MIN
G = 1HR
H = 2HR
J = 4HR
K = 12HR
L = 24HR
*/
static int ctron_GetRate(char *szData, int iLen)
{
char *pszIndex = NULL;
int iRate = 0;
int iRateHz = 0;
int iSDSec = -1;
pszIndex = strstr((char *)szData, "~");
if (NULL != pszIndex) {
iRate = Ctron_atoi(pszIndex + 1, 1);
iRateHz = Cyton_GetCurrentRate(iRate);
return CytonCmd_Pkg(CYTON_CMD_HZ, iRateHz, 0);
} else {
switch (*szData) {
case 'A':
iSDSec = 60 * 5;
break;
case 'S':
iSDSec = 60 * 15;
break;
case 'F':
iSDSec = 60 * 30;
break;
case 'G':
iSDSec = 60 * 60;
break;
case 'H':
iSDSec = 60 * 60 *2;
break;
case 'J':
iSDSec = 60 * 60 * 4;
break;
case 'K':
iSDSec = 60 * 60 * 12;
break;
case 'L':
iSDSec = 60 * 60 * 24;
break;
}
if (iSDSec > 0) {
return CytonCmd_Pkg(CYTON_CMD_SD, iSDSec, 0);
}
}
return -1;
}
int CytonCmd_PraseTcpJson(char *szData, int iLen)
{
//{"connected":true,"delimiter":true,"ip":"192.168.4.2","output":"raw","port":6677,"latency":10000}
cJSON *cjson_data;
cJSON *cjson_str;
int iRet = -1;
char *pszIndex = 0;
pszIndex = strstr((const char *)szData, "{");
if (NULL == pszIndex) {
printf("\r\ntcp json prase failed1111111111: %s\n", szData);
return -1;
}
cjson_data = cJSON_Parse(pszIndex);
if (cjson_data) {
cjson_str = cJSON_GetObjectItem(cjson_data,"ip");
if (cjson_str) {
sprintf(g_szOpenguiIP, "%s", cjson_str->valuestring);
printf("TCP Json g_szOpenguiIP %s\n", g_szOpenguiIP);
}
cjson_str = cJSON_GetObjectItem(cjson_data,"port");
if (cjson_str) {
g_iOpenguiPort = cjson_str->valueint;
printf("TCP Json g_iOpenguiPort %d\n", g_iOpenguiPort);
}
cjson_str = cJSON_GetObjectItem(cjson_data,"command");
if (cjson_str) {
iRet = ctron_GetRate(cjson_str->valuestring, strlen(cjson_str->valuestring));
if (iRet >= 0) {
g_stCytron_DevSeting.aucRate = iRet;
printf("TCP Json g_stCytron_DevSeting.aucRate %d\n", g_stCytron_DevSeting.aucRate);
}
}
printf("Test111");
cJSON_Delete(cjson_data);
printf("Test222");
return 0;
}
return -1;
}
int CytonCmd_Pkg(unsigned int uiCmd, unsigned int uiParam1, unsigned int uiParam2)
{
CYTON_CMD_INFO_T *pstInfo= (CYTON_CMD_INFO_T *)g_szCmdBuf;
pstInfo->uiHead = toNet32(CYTON_CMD_HEAD);
pstInfo->iType = toNet32(uiCmd);
pstInfo->uiParam1 = toNet32(uiParam1);
pstInfo->uiParam2 = toNet32(uiParam2);
return sizeof(CYTON_CMD_INFO_T);
}
char *CytonCmd_GetServerIp()
{
return g_szOpenguiIP;
}
int CytonCmd_GetServerPort()
{
return g_iOpenguiPort;
}
char *CytonCmd_PkgData(int *iLen)
{
*iLen = sizeof(CYTON_CMD_INFO_T);
return g_szCmdBuf;
}
#endif
\ No newline at end of file
#ifndef __CYTON_CMD_PUB_H
#define __CYTON_CMD_PUB_H
#define CYTON_CMD_HEAD (0xfffffffe)
typedef enum tagCytonCmd_Type {
CYTON_CMD_START = 0,
CYTON_CMD_STOP,
CYTON_CMD_HZ,
CYTON_CMD_SD,
CYTON_CMD_UNKNOW, /* -5 Read data error */
} CYTON_CMD_TYPE_E;
#pragma pack(push)
#pragma pack(1)
typedef struct stCytonCmd_Head{
unsigned int uiHead;
unsigned int iType;
unsigned int uiParam1;
unsigned int uiParam2;
} CYTON_CMD_INFO_T;
#pragma pack(pop)
int CytonCmd_Pkg(unsigned int uiCmd, unsigned int uiParam1, unsigned int uiParam2);
int CytonCmd_PraseTcpJson(char *szData, int iLen);
char *CytonCmd_GetServerIp();
int CytonCmd_GetServerPort();
char *CytonCmd_PkgData(int *iLen);
#endif
\ No newline at end of file
......@@ -9,6 +9,7 @@
#include "Cyton_Esp12Data.h"
#include "myQueue.h"
#include "cyton_cmd_pub.h"
......@@ -28,17 +29,17 @@ u8 Wifi_Sendbuf_Init(void)
{
u16 i;
WIFI_Info->datalength = (ADS129X_USE_CANNLE+1)*4 +3;//一次采样要发送的数据长度 39
memset(WIFI_Info->sendbuf,0,WIFI_SEND_LENGTH);//清零
WIFI_Info->datalength = ADS129X_USE_CANNLE * 3 + 9;//一次采样要发送的数据长度 39
memset(WIFI_Info->sendbuf, 0, WIFI_SEND_LENGTH);//清零
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//匿名上位机协议
for(i=0;i<ADS129x_info.Ads129x_Write_Num;i++) //一包N次采样
{
//帧头
WIFI_Info->sendbuf[0 + WIFI_Info->datalength*i] = 0xAA;
WIFI_Info->sendbuf[1 + WIFI_Info->datalength*i] = 0xFF;
WIFI_Info->sendbuf[2 + WIFI_Info->datalength*i] = 0xF1;
WIFI_Info->sendbuf[3 + WIFI_Info->datalength*i] = ADS129X_USE_CANNLE*4 +1; //有效数据长度 32 +1 = 33
WIFI_Info->sendbuf[0 + WIFI_Info->datalength*i] = 0xA0;
//WIFI_Info->sendbuf[1 + WIFI_Info->datalength*i] = 0xFF;
//WIFI_Info->sendbuf[2 + WIFI_Info->datalength*i] = 0xF1;
//WIFI_Info->sendbuf[3 + WIFI_Info->datalength*i] = ADS129X_USE_CANNLE*4 +1; //有效数据长度 32 +1 = 33
}
......@@ -272,37 +273,66 @@ void ESP8266_out_Cmd(void)
void ESP8266_Config_Http_connectTcp(void);
void ESP8266_Init(void)
#define toNet32(A) ((( (unsigned int)(A) & 0xff000000) >> 24)|(( (unsigned int)(A) & 0x00ff0000) >> 8)|(( (unsigned int)(A) & 0x0000ff00) << 8)|(( (unsigned int)(A) & 0x000000ff) << 24))
int g_iHz = 0;
void Cyton_UartPraseLoop()
{
//ESP8266_PWOEROFF;
//delay_ms(200);
ESP8266_PWOERON;
delay_s(2);
//ESP8266_RX_BUF, ESP8266_RX_LEN,//
CYTON_CMD_INFO_T *pstCmdInfo = NULL;
char *pszIndex = ESP8266_RX_BUF;
int iLen = ESP8266_RX_LEN;
while (iLen > 0) {
if (iLen >= sizeof(CYTON_CMD_INFO_T)) {
pstCmdInfo = (CYTON_CMD_INFO_T *) pszIndex;
if (CYTON_CMD_HEAD == toNet32(pstCmdInfo->uiHead)) {
ESP8266_DEBUG("Fine cmd %08x\r\n", toNet32(pstCmdInfo->iType));
ESP8266_DEBUG("Fine p1 %08x\r\n", toNet32(pstCmdInfo->uiParam1));
ESP8266_DEBUG("Fine p2 %08x\r\n", toNet32(pstCmdInfo->uiParam2));
if (toNet32(pstCmdInfo->iType) == CYTON_CMD_HZ) {
g_iHz = toNet32(pstCmdInfo->uiParam1);
ESP8266_DEBUG("g_iHz %d\r\n", g_iHz);
} else if (toNet32(pstCmdInfo->iType) == CYTON_CMD_START) {
ESP8266_DEBUG("Start collector %d Hz\r\n", g_iHz);
//CytonProcess_TimerCollStart(g_iHz);
ADS129x_ReInit(1, 1);
CytonEsp12_SetStreamStat(1);
} else if (toNet32(pstCmdInfo->iType) == CYTON_CMD_STOP) {
ESP8266_DEBUG("Stop collector\r\n");
CytonEsp12_SetStreamStat(0);
ADS129x_Stop();
//CytonProcess_TimerCollStop();
}
ESP8266_CLEAR();
}
} else {
break;
}
// ESP8266_RST=0;
// delay_ms(500);
// ESP8266_RST=1;
// delay_ms(500);
pszIndex ++;
iLen --;
}
//ESP8266_CLEAR();
}
void ESP8266_Init(void)
{
ESP8266_PWOERON;
delay_s(2);
ESP8266_DEBUG("进入AT指令模式1111\r\n");
ESP8266_DEBUG("默认波特率 %d\r\n",ESP_BAUD);
ESP8266_uart_init(ESP_BAUD);
ESP8266_SendCmd("+++", "OK", 1200);//退出透传
if(ESP8266_SendCmd(AT, "OK", 500) >= 0) //模块有效性检查
{
ESP8266_DEBUG("WIFI初始化成功\r\n");
ESP8266_SendCmd(RST, "OK", 500) ;//复位
USART_ITConfig(ESP8266_UART, USART_IT_RXNE, DISABLE);//串口接收中断
//return;
}
else
{
ESP8266_DEBUG("无响应,按照默认参数设置\r\n");
ESP8266_Config();//设置WIFI
}
delay_s(2);
ESP8266_Config_Http_connectTcp();
//while (0) {
//Cyton_UartPraseLoop();
//CytonProcess_Loop();
//delay_ms(2);
//}
}
//串口配网
......
......@@ -25,9 +25,9 @@
#define ADS129x_WIFI_REC_EN 0 //WiFi接收使能
#define WIFI_REC_LENGTH 1460 //接收缓冲区
//匿名上位机
#define WIFI_SEND_LENGTH 1443 //发送缓冲区 一帧数据长度39一帧`次采样 39*37=1444
#define WIFI_QUEUE_LENGTH 888 //(队列容量)缓冲区有效数据长度24*37=888
#define WIFI_QUEUE_SIZE 10 //队列大小
#define WIFI_SEND_LENGTH 330 //发送缓冲区 一帧数据长度39一帧`次采样 33*10 99 39*37=1444
#define WIFI_QUEUE_LENGTH (240) //(队列容量)缓冲区有效数据长度24*3=72 24*37 888
#define WIFI_QUEUE_SIZE 20 //队列大小
/////////////////////////////////////////////////////////////////////////////////////////////
//发送数据格式
typedef struct {
......@@ -60,7 +60,7 @@ extern _WIFI_Info *WIFI_Info ; //上传数据结构
////#define ESP_USARTDEF "AT+UART_DEF=460800,8,1,0,0\r\n" //修改波特率 无流控 保存到flash
//#define ESP_USARTDEF "AT+UART_DEF=460800,8,1,0,1\r\n" //修改波特率 使能RTS流控 保存到flash
#define ESP_BAUD 921600 //波特率
#define ESP_BAUD (460800) //(460800) //921600 //波特率
//#define ESP_USARTDEF "AT+UART_DEF=921600,8,1,0,0\r\n" //修改波特率 无流控 保存到flash
#define ESP_USARTDEF "AT+UART_DEF=921600,8,1,0,1\r\n" //修改波特率 使能RTS流控 保存到flash
......
......@@ -127,8 +127,8 @@ void UART2_DMA_TX_NVIC_Config(u8 cmd)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel7_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //子优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
......
......@@ -30,7 +30,7 @@
//内存参数设定.
#define MEM_BLOCK_SIZE 32 //内存块大小为32字节
#define MEM_MAX_SIZE 4*1024 //最大管理内存
#define MEM_MAX_SIZE 12*1024 //最大管理内存
#define MEM_ALLOC_TABLE_SIZE MEM_MAX_SIZE/MEM_BLOCK_SIZE //内存表大小
......
......@@ -175,14 +175,18 @@ void USART2_IRQHandler(void)
u8 Res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
USART2_TIME=0;
// USART2_TIME=0;
Res = USART_ReceiveData(USART2); //读取接收到的数据
USART2_RX_BUF[USART2_RX_LEN] = Res;
USART2_RX_LEN++;
if(USART2_RX_LEN == USART_REC_LEN)
if(USART2_RX_LEN >= USART_REC_LEN) {
USART2_RX_LEN=0;
}
} else {
Res = USART_ReceiveData(USART2);
printf("USART2_RX_ERR\n\n");
}
}
......
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00010000 { ; load region size_region
ER_IROM1 0x08000000 0x00010000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00005000 { ; RW data
.ANY (+RW +ZI)
}
}
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00010000 { ; load region size_region
ER_IROM1 0x08000000 0x00010000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00005000 { ; RW data
.ANY (+RW +ZI)
}
}
......@@ -933,7 +933,7 @@
<Group>
<GroupName>CYTON</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
......@@ -1002,6 +1002,19 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Cyton\cyton_cmd_pub.c</PathWithFileName>
<FilenameWithoutPath>cyton_cmd_pub.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
......@@ -1012,7 +1025,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
......
......@@ -848,6 +848,11 @@
<FileType>1</FileType>
<FilePath>..\Cyton\Cyton_Process.c</FilePath>
</File>
<File>
<FileName>cyton_cmd_pub.c</FileName>
<FileType>1</FileType>
<FilePath>..\Cyton\cyton_cmd_pub.c</FilePath>
</File>
</Files>
</Group>
<Group>
......
......@@ -101,7 +101,7 @@
//main
int main(void)
{
work_state=SEND_BULE;
work_state = SEND_WIFI;
//work_state=SEND_WIFI;
//work_state=SEND_UART;
/////////////////////////////////////////////////////////////////////////
......@@ -109,42 +109,46 @@ int main(void)
//初始化系统时钟 72M
SystemInit();
delay_init();
// uart3_init(115200);
// while(1) {
// Main_printf("Test\r\n");
// delay_ms(1000);
// }
LED_Init();
KEY_Init(); //初始化按键
KE_IO_Init(); //拨码开关
ADS129x_GPIO_Init();//初始化ADS129X外设
HCO5_IO_Init(); //关蓝牙电源
ESP8266_IO_Init();//关WIFI电源
//ESP8266_PWOERON;
//while (1);
uart1_init(460800);//串口初始化
Main_printf("上电\r\n");
ESP8266_PWOERON;
uart1_init(921600);//串口初始化
//while(Power_ON());//按键开机检测
Main_printf("开机\r\n");
Main_printf("版本 STM32F103C8 V2.5.2 适配匿名V7上位机 适配ADS1299 V2.2 2022-04-20\r\n");
Main_printf("当前芯片选择 %d\r\n",ADS129X_DEVICE);
Main_printf("Turn on\r\n");
Main_printf("Version STM32F103C8 V2.5.2 ADS1299 V2.2 2022-05-20\r\n");
Main_printf("Current ads129x device id %d\r\n",ADS129X_DEVICE);
delay_ms(200);
/////////////////////////////////////////////////////////////////////
TIM2_Init(500,7200); //按键检测+按键消抖
TIM4_Init(10000,7200); //系统指示灯
/////////////////////////////////////////////////////////////////////////
Main_printf("ADC 初始化\r\n");
Main_printf("ADC Init\r\n");
adc1_init();
ADC_DMA_Config(ADCConvertedValue,1);
ADC_DMA_Enable();
Main_printf("开启 DMA ADC\r\n");
Main_printf("Enable DMA ADC\r\n");
/////////////////////////////////////////////////////////////////////////
//初始化串口结构
UART_Info =(_UART_Info*)mymalloc(sizeof(_UART_Info)); //数据结构
UART_Info->sendbuf = (u8*)mymalloc(UART_SEND_LENGTH); //发送缓冲区
if(UART_Info == NULL || UART_Info->sendbuf == NULL )
{
Main_printf("内存申请失败\r\n");
Main_printf("Memery malloc failed\r\n");
}
else
{
Main_printf("内存申请成功,当前占用 %d\r\n",mem_perused());
Main_printf("Memery malloc success,used %d\r\n",mem_perused());
}
/////////////////////////////////////////////////////////////////////////
while(1)
......@@ -175,7 +179,7 @@ void Send_BlueTooth(void)
#elif ADS129X_DEVICE == ADS1298
ADS129x_REG_BUF[1]=0x86; //500采样率
#endif
ADS129x_ReInit(0);//初始化1299
ADS129x_ReInit(0, 0);//初始化1299
/////////////////////////////////////////////////////////////////
Main_printf("申请串口缓存,内存当前占用 %d\r\n",mem_perused());
UART_Info->sendbuf = (u8*)mymalloc(UART_SEND_LENGTH); //发送缓冲区
......@@ -309,7 +313,7 @@ void Send_UART1(void)
#elif ADS129X_DEVICE == ADS1298
ADS129x_REG_BUF[1]=0x86; //500采样率
#endif
ADS129x_ReInit(0);//初始化1299
ADS129x_ReInit(0, 0);//初始化1299
/////////////////////////////////////////////////////////////////
Main_printf("申请串口缓存,内存当前占用 %d\r\n",mem_perused());
UART_Info->sendbuf = (u8*)mymalloc(UART_SEND_LENGTH); //发送缓冲区
......@@ -413,7 +417,7 @@ void TEST_ESP8266(void)
#elif ADS129X_DEVICE == ADS1298
ADS129x_REG_BUF[1]=0x85; //1000采样率
#endif
ADS129x_ReInit(1);//初始化1299
ADS129x_ReInit(1, 0);//初始化1299
/////////////////////////////////////////////////////////////////
Main_printf("内存当前占用 %d\r\n",mem_perused());
WIFI_Info =(_WIFI_Info*)mymalloc(sizeof(_WIFI_Info)); //数据结构
......@@ -509,6 +513,48 @@ void TEST_ESP8266(void)
}
uint8_t g_aucSendIndexData = 0;
int iDebug = 0;
void testLoop() {
static int Total = 0;
char szBuff[330] = {0};
int i=0;
int iCnt = 1000;
for (; i< 330; i++) {
*((uint8_t *)(WIFI_Info->sendbuf + i)) = i;
}
delay_s(5);
Main_printf("Start Send test Data\r\n");
while (iCnt > 0) {
if(UART2_DMA_Finish==1)
{
delay_ms(4);
DMA_Enable(DMA1_Channel7,330);//开启DMA
Total ++;
UART2_DMA_Finish=0;
iCnt --;
}
//ESP8266_SendData(WIFI_Info->sendbuf, 330);
delay_us(10);
if (Total % 100 == 0) {
delay_ms(10);
Main_printf("Start Send %d \r\n", Total);
}
}
Main_printf("Start Send %d\r\n", Total * 330);
while(1) {
}
}
//WIFI发送 采样率最大2K
void Send_ESP8266(void)
{
......@@ -519,44 +565,21 @@ void Send_ESP8266(void)
Main_printf("WIFI发送\r\n");
TIM_Cmd(TIM4, DISABLE);
/////////////////////////////////////////////////////////////////
//初始化129X
#if ADS129X_DEVICE == ADS1299
ADS129x_REG_BUF[1]=0xD4; //1000采样率
#elif ADS129X_DEVICE == ADS1298
ADS129x_REG_BUF[1]=0x85; //1000采样率
#endif
ADS129x_ReInit(1);//初始化1299
//ADS129x_ReInit(1, 2);//初始化1299
/////////////////////////////////////////////////////////////////
Main_printf("内存当前占用 %d\r\n",mem_perused());
Main_printf("Memery Current %d\r\n",mem_perused());
WIFI_Info =(_WIFI_Info*)mymalloc(sizeof(_WIFI_Info)); //数据结构
WIFI_Info->sendbuf = (u8*)mymalloc(WIFI_SEND_LENGTH); //WIFI发送缓冲区
WIFI_Info->sendbuf = (u8*)mymalloc(1024); //WIFI发送缓冲区
WIFI_Info->WIFI_Queue = queue_init(WIFI_QUEUE_SIZE,WIFI_QUEUE_LENGTH) ;//循环队列初始化
if(WIFI_Info == NULL || WIFI_Info->sendbuf == NULL || WIFI_Info->WIFI_Queue == NULL)
{
Main_printf("发送结构体 内存申请失败\r\n");
}
Main_printf("内存申请成功 当前内存使用率 %d\r\n",mem_perused());
/////////////////////////////////////////////////////////////////
Main_printf("初始化WIFI\r\n");
delay_ms(500);
if(!KE_3)//开启WIFI设置检测
{
Main_printf("WIFI配网检测,长按按键3S开始配网\r\n");
TIM4_Init(3000,7200); //WIFI设置检测
TIM4_Timing=0;
ESP8266_SET_FLAG=0;
while(ESP8266_SET_FLAG==0 && TIM4_Timing<10) //等待3s
ESP8266_SET();//检测按键
if(ESP8266_SET_FLAG)//配网
{
Set_WIFI(); //WIFIAT配网
}
TIM4_Init(10000,7200); //系统指示灯
TIM_Cmd(TIM4, DISABLE);
Main_printf("Wifi send struct malloc failed\r\n");
}
///////////////////////////////////////////////////////////////////////////////////
Main_printf("WIFI初始化\r\n");
Main_printf("Wifi send struct malloc success %d\r\n",mem_perused());
Main_printf("WIFI Init\r\n");
Main_printf("开启DMA及中断\r\n");
ADS129x_Stop();
//ADS129x_ReInit(1, 0);
ESP8266_Init();//初始化
DMA_Config(DMA1_Channel7,(u32)&USART2->DR,(u32)WIFI_Info->sendbuf);
UART2_DMA_TX_NVIC_Config(1);//开启串口 DMA中断
......@@ -575,7 +598,7 @@ void Send_ESP8266(void)
LED_1=LED_OFF;
LED_2=LED_OFF;
TIM4_Init(10000,7200); //系统指示灯
EXTI->IMR |= ADS129X_DRDY_LINE;//开DRDY中断
///////////////////////////////////////////////////////////////////////////////////
while(work_state==SEND_WIFI)//WIFI发送,
{
......@@ -586,12 +609,20 @@ void Send_ESP8266(void)
WIFI_Info->WIFI_Queue->Queue_Full_flag=0;
Main_printf("WIFI queue full ");
}
//testLoop();
/* Loop Message. */
Cyton_UartPraseLoop();
if(UART2_DMA_Finish==1)
{
if(serch_queue_data(WIFI_Info->WIFI_Queue))//队列有数据
{
//delay_ms(1);
for(j=0;j<ADS129x_info.Ads129x_Write_Num;j++)//一帧N次采样的数据
{
#if 0
for(i=0;i<8;i++)//处理8个通道的数据
{
ADS129x_info.cannle[i] = *(*(WIFI_Info->WIFI_Queue->databuf + WIFI_Info->WIFI_Queue->front)+0+i*3+j*ADS129x_info.Ads129x_Data_Move)<<16
......@@ -617,14 +648,39 @@ void Send_ESP8266(void)
}
WIFI_Info->sendbuf[(ADS129X_USE_CANNLE+1)*4 +1 +j*WIFI_Info->datalength] = sumcheck; //校验
WIFI_Info->sendbuf[(ADS129X_USE_CANNLE+1)*4 +2 +j*WIFI_Info->datalength] = addcheck; //校验
#else
/* 1: 0xa0 2: autoCnt 3: 24 byte 27-32:0x00 33: 0xC0*/
WIFI_Info->sendbuf[j * WIFI_Info->datalength] = 0xA0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 1] = g_aucSendIndexData ++;
memcpy(&WIFI_Info->sendbuf[j * WIFI_Info->datalength + 2],
(*(WIFI_Info->WIFI_Queue->databuf + WIFI_Info->WIFI_Queue->front) +j * ADS129x_info.Ads129x_Data_Move),
ADS129x_info.Ads129x_Data_Move); /* 24 byte data.*/
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 27] = 0x0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 27] = 0x0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 28] = 0x0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 29] = 0x0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 30] = 0x0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 31] = 0x0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 32] = 0xC0;
#endif
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ESP8266_SendData(WIFI_Info->sendbuf, WIFI_SEND_LENGTH);
delay_ms(1);
DMA_Enable(DMA1_Channel7,WIFI_SEND_LENGTH);//开启DMA
UART2_DMA_Finish=0;
WIFI_Info->WIFI_Queue->front = (WIFI_Info->WIFI_Queue->front+1) % WIFI_Info->WIFI_Queue->capacity;//取数据,队头自增,存数据,队尾自增
if (iDebug ++ % 1000 == 0) {
Main_printf("WIFI Send WIFI_Info->WIFI_Queue->front %d ADS129x_info.Ads129x_Data_Move %d Ads129x_Write_Num %d WIFI_Info->datalength %d\n",
WIFI_Info->WIFI_Queue->front, ADS129x_info.Ads129x_Data_Move, ADS129x_info.Ads129x_Write_Num, WIFI_Info->datalength);
}
} else {
//printf("n");
//delay_ms(500);
}
}
}
EXTI->IMR &= ~(ADS129X_DRDY_LINE);//屏蔽外部中断
TIM_Cmd(TIM4, DISABLE);
ESP8266_PWOEROFF;//关WIFI
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment