Commit aa1f33e0 by zhanggf

[Debug] SD card and openbciGUI OK.

Signed-off-by: zhanggf <zhanggf@example.com>
parent ad0e6a3c
...@@ -10,10 +10,13 @@ ...@@ -10,10 +10,13 @@
#include "cJSON.h" #include "cJSON.h"
#include "myQueue.h" #include "myQueue.h"
#include "cyton_cmd_pub.h"
typedef struct stCytron_DevSeting { typedef struct stCytron_DevSeting {
uint8_t aucRate; int iRate;
uint32_t uiSaveSdCardMs;
uint8_t aucDeviceNum;
uint8_t aucStreamStat; uint8_t aucStreamStat;
} CYTON_DEVSETING_T; } CYTON_DEVSETING_T;
...@@ -23,6 +26,7 @@ static int g_iOpenguiFd = 4; ...@@ -23,6 +26,7 @@ static int g_iOpenguiFd = 4;
static uint8_t g_iOepnguiConnnectStat = 0; static uint8_t g_iOepnguiConnnectStat = 0;
static CYTON_DEVSETING_T g_stCytron_DevSeting; static CYTON_DEVSETING_T g_stCytron_DevSeting;
#if 0
static int Ctron_atoi(uint8_t *szData, int iLen) static int Ctron_atoi(uint8_t *szData, int iLen)
{ {
//0,11:123456711 //0,11:123456711
...@@ -214,21 +218,6 @@ void Ctron_Esp12Data_Recv(int iFD, uint8_t *szData, int iLen) ...@@ -214,21 +218,6 @@ void Ctron_Esp12Data_Recv(int iFD, uint8_t *szData, int iLen)
void Ctron_Esp12Data_Send(int iFD, uint8_t *szData, int iLen, int iClose) void Ctron_Esp12Data_Send(int iFD, uint8_t *szData, int iLen, int iClose)
{ {
uint8_t szCmd[64] = 0;
sprintf(szCmd, "AT+CIPSEND=%d,%d\r\n", iFD, iLen);
/* AT+CIPSEND=<link ID>,<length> */
ESP8266_SendCmd(szCmd, ">", 100);
ESP8266_SendData(szData, iLen);
//delay_ms(20);
if (iClose) {
delay_ms(200);
memset(szCmd, 0, sizeof(szCmd));
sprintf(szCmd, "AT+CIPCLOSE=%d\r\n", iFD);
ESP8266_SendCmd(szCmd, "OK", 50);
}
} }
...@@ -259,6 +248,8 @@ int CytonEsp12_DataGetReportFd() ...@@ -259,6 +248,8 @@ int CytonEsp12_DataGetReportFd()
return g_iOpenguiFd; return g_iOpenguiFd;
} }
#endif
int CytonEsp12_StreamStat() int CytonEsp12_StreamStat()
{ {
return g_stCytron_DevSeting.aucStreamStat; return g_stCytron_DevSeting.aucStreamStat;
...@@ -269,37 +260,122 @@ void CytonEsp12_SetStreamStat(int iStat) ...@@ -269,37 +260,122 @@ void CytonEsp12_SetStreamStat(int iStat)
g_stCytron_DevSeting.aucStreamStat = iStat; g_stCytron_DevSeting.aucStreamStat = iStat;
} }
int CytonEsp12_GetCurrentRate() uint8_t CytonEsp12_GetCurrentRateCmd()
{ {
int iRate = g_stCytron_DevSeting.aucRate; int iRate = g_stCytron_DevSeting.iRate;
int iRet = 1000; uint8_t aucRet = 0;
/*
ADS129X_CMD_250HZ = 0,
ADS129X_CMD_500HZ,
ADS129X_CMD_1000HZ,
ADS129X_CMD_2000HZ,
ADS129X_CMD_4000HZ,
ADS129X_CMD_8000HZ,
*/
switch(iRate) { if (250 == iRate) {
case 0: aucRet = ADS129X_CMD_250HZ;
iRet = 16000; } else if (500 == iRate) {
break; aucRet = ADS129X_CMD_500HZ;
case 1: } else if (1000 == iRate) {
iRet = 8000; aucRet = ADS129X_CMD_1000HZ;
break; } else if (2000 == iRate) {
case 2: aucRet = ADS129X_CMD_2000HZ;
iRet = 4000; } else if (4000 == iRate) {
break; aucRet = ADS129X_CMD_4000HZ;
case 3: } else if (8000 == iRate) {
iRet = 2000; aucRet = ADS129X_CMD_8000HZ;
break;
case 4:
iRet = 1000;
break;
case 5:
iRet = 500;
case 6:
iRet = 250;
break;
default:
break;
} }
return iRet; return aucRet;
}
#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 CytonEsp12_PraseLoop()
{
//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("Find cmd %08x\r\n", toNet32(pstCmdInfo->iType));
ESP8266_DEBUG("Find p1 %08x\r\n", toNet32(pstCmdInfo->uiParam1));
if (toNet32(pstCmdInfo->iType) == CYTON_CMD_HZ) {
g_stCytron_DevSeting.iRate = toNet32(pstCmdInfo->uiParam1);
ESP8266_DEBUG("g_iHz %d\r\n", g_stCytron_DevSeting.iRate);
} else if (toNet32(pstCmdInfo->iType) == CYTON_CMD_SD) {
g_stCytron_DevSeting.uiSaveSdCardMs = toNet32(pstCmdInfo->uiParam1) * 1000;
ESP8266_DEBUG("Save SD command %d \r\n", g_stCytron_DevSeting.uiSaveSdCardMs);
g_stCytron_DevSeting.iRate = 250;
} else if (toNet32(pstCmdInfo->iType) == CYTON_CMD_DEVICE_CONN) {
g_stCytron_DevSeting.aucDeviceNum = toNet32(pstCmdInfo->uiParam1);
ESP8266_DEBUG("Current Device connect number %d S\r\n", g_stCytron_DevSeting.aucDeviceNum);
} else if (toNet32(pstCmdInfo->iType) == CYTON_CMD_START) {
ESP8266_DEBUG("Start collector %d Hz\r\n", g_stCytron_DevSeting.iRate);
if (0 == CytonEsp12_StreamStat()) {
if (g_stCytron_DevSeting.uiSaveSdCardMs > 0) {
CytonSD_Start();
}
ADS129x_ReInit(1, CytonEsp12_GetCurrentRateCmd());
CytonEsp12_SetStreamStat(1);
} else {
ESP8266_DEBUG("Already start collector %d Hz, ignore\r\n", g_stCytron_DevSeting.iRate);
}
} else if (toNet32(pstCmdInfo->iType) == CYTON_CMD_STOP) {
ESP8266_DEBUG("Stop collector\r\n");
CytonEsp12_SetStreamStat(0);
ADS129x_Stop();
if (g_stCytron_DevSeting.uiSaveSdCardMs > 0) {
CytonSD_Stop();
}
}
ESP8266_CLEAR();
break;
}
} else {
break;
}
pszIndex ++;
iLen --;
}
//ESP8266_CLEAR();
}
uint32_t CytonEsp12_GetSDSaveMs()
{
return g_stCytron_DevSeting.uiSaveSdCardMs;
}
uint32_t CytonEsp12_KeySaveSD()
{
if (0 == CytonEsp12_StreamStat()) {
g_stCytron_DevSeting.uiSaveSdCardMs = 300000;
g_stCytron_DevSeting.iRate = 250;
CytonSD_Start();
ADS129x_ReInit(1, CytonEsp12_GetCurrentRateCmd());
CytonEsp12_SetStreamStat(1);
ESP8266_DEBUG("Button start collector %d Hz, ignore\r\n", g_stCytron_DevSeting.iRate);
} else {
ESP8266_DEBUG("Button Stop collector\r\n");
CytonEsp12_SetStreamStat(0);
ADS129x_Stop();
if (g_stCytron_DevSeting.uiSaveSdCardMs > 0) {
CytonSD_Stop();
}
}
} }
...@@ -29,7 +29,11 @@ void Ctron_Esp12Data_Recv(int iFd, uint8_t *szData, int iLen); ...@@ -29,7 +29,11 @@ void Ctron_Esp12Data_Recv(int iFd, uint8_t *szData, int iLen);
void Ctron_Esp12Data_Send(int iFd, uint8_t *szData, int iLen, int iClose); void Ctron_Esp12Data_Send(int iFd, uint8_t *szData, int iLen, int iClose);
int CytonEsp12_DataGetReportFd(); int CytonEsp12_DataGetReportFd();
int CytonEsp12_StreamStat(); int CytonEsp12_StreamStat();
int CytonEsp12_GetCurrentRate(); uint8_t CytonEsp12_GetCurrentRateCmd();
void CytonEsp12_SetStreamStat(int iStat); void CytonEsp12_SetStreamStat(int iStat);
void CytonEsp12_PraseLoop();
uint32_t CytonEsp12_GetSDSaveMs();
uint32_t CytonEsp12_KeySaveSD();
#endif #endif
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#define CYTON_COLLECTOR_DATA_CACHE_LEN (123) #define CYTON_COLLECTOR_DATA_CACHE_LEN (123)
#if 0
static int g_iTimerindex = 0; static int g_iTimerindex = 0;
static int g_iTotalLen = 0; static int g_iTotalLen = 0;
...@@ -125,4 +126,5 @@ void CytonProcess_Loop() ...@@ -125,4 +126,5 @@ void CytonProcess_Loop()
ESP8266_DEBUG("Start Report total %d\n", g_iTotalLen); ESP8266_DEBUG("Start Report total %d\n", g_iTotalLen);
} }
} }
} }
\ No newline at end of file #endif
\ No newline at end of file
#include "Cyton_SD.h"
#include "usart.h"
#include <string.h>
#include "delay.h"
#include "led.h"
#include "key.h"
#include "Timer.h"
#include "ADS129x.h"
#include "adc.h"
#include "fattester.h"
#include "myQueue.h"
static int g_SdInitResult = 0;
static int g_SdIsBusy = 0;
static FIL g_stfile;
static u8 sd_path[] = "0:";
static uint8_t g_aucWriteHeadIndex = 0;
int CytonSD_Init()
{
int iRet = -1;
exfuns_init();
iRet = mf_mount(sd_path, 1);
if (iRet == 0) {
Main_printf("mount end %d Success\r\n", iRet);
mf_showfree("0:");
g_SdInitResult = 1;
} else {
Main_printf("mount end %d failed\r\n", iRet);
}
mf_scan_files("0:");
mf_showfree("0:");
return iRet;
}
int CytonSD_Start()
{
int iLoop = 0;
char szFileName[64] = {0};
char szAbFileName[64] = {0};
int iRet = 0;
char szTmp[16] = {0};
g_aucWriteHeadIndex = 0;
if (1 != g_SdInitResult) {
Main_printf("SD not mount\r\n");
return -1;
}
for (iLoop = 0; iLoop < 256; iLoop ++) {
memset(szFileName, 0, sizeof(szFileName));
sprintf(szFileName, "OPBI_%d.txt", iLoop);
if (0 == mf_scan_fileExist("0:", szFileName)) {
Main_printf("file is not exist, start creat %s\r\n", szFileName);
sprintf(szAbFileName, "0:%s", szFileName);
break;
}
}
iRet = f_open(&g_stfile, szAbFileName, FA_CREATE_NEW | FA_WRITE);
Main_printf("f_open %d\r\n", iRet);
if (0 == iRet) {
sprintf(szTmp, "%08X\n", CytonSys_GetCurrentms());
CytonSD_Write("%STOP AT\n", strlen("%STOP AT\n"));
CytonSD_Write(szTmp, strlen(szTmp));
}
g_SdIsBusy = 1;
f_sync(&g_stfile);
return iRet;
}
int CytonSD_Write(char *szBuf, int iLen)
{
int iRet = -1;
int iWriten = 0;
if (1 != g_SdInitResult) {
return 0;
}
//f_lseek(&file, 1024*1024);
iRet = f_write(&g_stfile, szBuf, iLen, &iWriten);
if (iRet != 0) {
Main_printf("[%d] %d iWriten %d failed\r\n", iRet);
}
//f_sync(&g_stfile);
return iWriten;
}
int CytonSD_WriteChannelData(char *szBuf, int iChannel, int iNum)
{
char szTmp[512] = {0};
int iLoop = 0;
int iOneBufLen = 0;
int iLoopJ = 0;
if (1 != g_SdInitResult) {
return 0;
}
iOneBufLen = iChannel * 7 + 3;
for (;iLoop < iNum; iLoop++) {
g_aucWriteHeadIndex ++;
sprintf((szTmp + iOneBufLen * iLoop), "%02X,", g_aucWriteHeadIndex);
for (iLoopJ = 0; iLoopJ < iChannel; iLoopJ ++) {
sprintf((szTmp + iOneBufLen * iLoop + 3 + iLoopJ * 7), "%02X", *(szBuf + iLoop * iChannel * 3 + iLoopJ * 3));
sprintf((szTmp + iOneBufLen * iLoop + 3 + iLoopJ * 7 + 2), "%02X", *(szBuf + iLoop * iChannel * 3 + iLoopJ * 3 +1));
if (iLoopJ == (iChannel - 1)) {
sprintf((szTmp + iOneBufLen * iLoop + 3 + iLoopJ * 7 + 4), "%02X\n", *(szBuf + iLoop * iChannel * 3 + iLoopJ * 3 + 2));
} else {
sprintf((szTmp + iOneBufLen * iLoop + 3 + iLoopJ * 7 + 4), "%02X,", *(szBuf + iLoop * iChannel * 3 + iLoopJ * 3 + 2));
}
}
}
//printf("szTmp %s ****\n",szTmp);
CytonSD_Write(szTmp, strlen(szTmp));
return 0;
}
int CytonSD_Stop()
{
char szTmp[16] = {0};
if (1 != g_SdInitResult) {
return 0;
}
//sprintf(szTmp, "%08X\n", CytonSys_GetCurrentms());
//CytonSD_Write("%STOP AT\n", strlen("%STOP AT\n"));
//CytonSD_Write(szTmp, strlen(szTmp));
CytonSD_Write("%Total time mS:\n", strlen("%Total time mS:\n"));
CytonSD_Write(szTmp, strlen(szTmp));
CytonSD_Write("%min Write time uS:\n", strlen("%min Write time uS:\n"));
CytonSD_Write(szTmp, strlen(szTmp));
CytonSD_Write("%max Write time uS:\n", strlen("%max Write time uS:\n"));
CytonSD_Write(szTmp, strlen(szTmp));
CytonSD_Write("%Over:\n", strlen("%Over:\n"));
CytonSD_Write(szTmp, strlen(szTmp));
CytonSD_Write("%block, uS\n", strlen("%block, uS\n"));
CytonSD_Write(szTmp, strlen(szTmp));
g_SdIsBusy = 0;
g_aucWriteHeadIndex = 0;
f_close(&g_stfile);
return 0;
}
int CytonSD_GetStatus()
{
return (g_SdInitResult + g_SdIsBusy);
}
\ No newline at end of file
#ifndef __CYTON_SD_H
#define __CYTON_SD_H
#include "sys.h"
#include "myQueue.h"
int CytonSD_Init();
int CytonSD_Start();
int CytonSD_Write(char *szBuf, int iLen);
int CytonSD_WriteChannelData(char *szBuf, int iChannel, int iNum);
int CytonSD_Stop();
#endif
...@@ -8,6 +8,7 @@ typedef enum tagCytonCmd_Type { ...@@ -8,6 +8,7 @@ typedef enum tagCytonCmd_Type {
CYTON_CMD_STOP, CYTON_CMD_STOP,
CYTON_CMD_HZ, CYTON_CMD_HZ,
CYTON_CMD_SD, CYTON_CMD_SD,
CYTON_CMD_DEVICE_CONN,
CYTON_CMD_UNKNOW, /* -5 Read data error */ CYTON_CMD_UNKNOW, /* -5 Read data error */
} CYTON_CMD_TYPE_E; } CYTON_CMD_TYPE_E;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
static CYTON_SYS_API_TIMER_CB g_pfCollectorTimerCB = NULL; static CYTON_SYS_API_TIMER_CB g_pfCollectorTimerCB = NULL;
static int g_iSysApi_collectorTIndex = 0; static int g_iSysApi_collectorTIndex = 0;
static uint32_t g_uiSysMs = 0;
void CytonSys_CollectorTimerStart(int iHz, CYTON_SYS_API_TIMER_CB pfCB) void CytonSys_CollectorTimerStart(int iHz, CYTON_SYS_API_TIMER_CB pfCB)
...@@ -38,4 +39,28 @@ void CytonSys_CollectorCB() ...@@ -38,4 +39,28 @@ void CytonSys_CollectorCB()
if (g_pfCollectorTimerCB) { if (g_pfCollectorTimerCB) {
(*g_pfCollectorTimerCB)(g_iSysApi_collectorTIndex); (*g_pfCollectorTimerCB)(g_iSysApi_collectorTIndex);
} }
}
void cytonSys_msCB(uint32_t iTimeIndex)
{
g_uiSysMs ++;
}
void CytonSys_StartupTimerInit()
{
int iArr = 0;
g_pfCollectorTimerCB = cytonSys_msCB;
/* 10000 1s CB.*/
iArr = 10;
/* 7200 0000 */
TIM1_Init(iArr, 7200);
TIM1_Start();
}
uint32_t CytonSys_GetCurrentms()
{
return g_uiSysMs;
} }
\ No newline at end of file
...@@ -4,11 +4,14 @@ ...@@ -4,11 +4,14 @@
#include "sys.h" #include "sys.h"
#include "myQueue.h" #include "myQueue.h"
typedef void (*CYTON_SYS_API_TIMER_CB)(int iTimeIndex); typedef void (*CYTON_SYS_API_TIMER_CB)(uint32_t iTimeIndex);
void CytonSys_CollectorTimerStart(int iHz, CYTON_SYS_API_TIMER_CB pfCB); void CytonSys_CollectorTimerStart(int iHz, CYTON_SYS_API_TIMER_CB pfCB);
void CytonSys_Stop(); void CytonSys_Stop();
void CytonSys_CollectorCB(); void CytonSys_CollectorCB();
void CytonSys_StartupTimerInit();
uint32_t CytonSys_GetCurrentms();
#endif #endif
......
...@@ -263,6 +263,31 @@ u32 mf_showfree(u8 *drv) ...@@ -263,6 +263,31 @@ u32 mf_showfree(u8 *drv)
return fre_sect; return fre_sect;
} }
u32 mf_scan_fileExist(u8 *path, u8 *szName)
{
FRESULT res;
int iRet = 0;
res = f_opendir(&dir,(const TCHAR*)path); //打开一个目录
if (res == FR_OK)
{
printf("\r\n");
while(1)
{
res = f_readdir(&dir, &fileinfo); //读取目录下的一个文件
if (res != FR_OK || fileinfo.fname[0] == 0) break; //错误了/到末尾了,退出
//if (fileinfo.fname[0] == '.') continue; //忽略上级目录
if (0 == strcmp(fileinfo.fname, szName)) {
printf("%s/", path);//打印路径
printf("File is Exist %s\r\n", fileinfo.fname);//打印文件名
iRet = 1;
break;
}
}
}
return iRet;
}
/** /**
* @brief 文件读写指针偏移 * @brief 文件读写指针偏移
* *
......
...@@ -48,6 +48,8 @@ void mf_setlabel(u8 *path); ...@@ -48,6 +48,8 @@ void mf_setlabel(u8 *path);
void mf_gets(u16 size); void mf_gets(u16 size);
u8 mf_putc(u8 c); u8 mf_putc(u8 c);
u8 mf_puts(u8*c); u8 mf_puts(u8*c);
u32 mf_scan_fileExist(u8 *drv, u8 *szName);
#endif #endif
......
...@@ -2940,6 +2940,7 @@ FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */ ...@@ -2940,6 +2940,7 @@ FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */
fs->fs_type = 0; /* Clear the file system object */ fs->fs_type = 0; /* Clear the file system object */
fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */
printf("disk_initialize\n");
stat = disk_initialize(fs->drv); /* Initialize the physical drive */ stat = disk_initialize(fs->drv); /* Initialize the physical drive */
if (stat & STA_NOINIT) { /* Check if the initialization succeeded */ if (stat & STA_NOINIT) { /* Check if the initialization succeeded */
return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */
...@@ -3186,8 +3187,10 @@ FRESULT f_mount ( ...@@ -3186,8 +3187,10 @@ FRESULT f_mount (
} }
FatFs[vol] = fs; /* Register new fs object */ FatFs[vol] = fs; /* Register new fs object */
printf("SD 1111 %d opt %d", !fs, opt);
if (!fs || opt != 1) return FR_OK; /* Do not mount now, it will be mounted later */ if (!fs || opt != 1) return FR_OK; /* Do not mount now, it will be mounted later */
printf("SD 222\n");
res = find_volume(&path, &fs, 0); /* Force mounted the volume */ res = find_volume(&path, &fs, 0); /* Force mounted the volume */
LEAVE_FF(fs, res); LEAVE_FF(fs, res);
} }
......
...@@ -13,14 +13,7 @@ ...@@ -13,14 +13,7 @@
_WIFI_Info *WIFI_Info ; //WIFI数据结构 _WIFI_Info *WIFI_Info ; //WIFI数据结构d
//TCP传输需要手动设置 WIFI名称 密码 IP地址 端口
u8 M8266_CWJAP[60]="AT+CWJAP=\"OPPORENO\",\"12345678\"\r\n"; //连接AP ssid: xxx 密码:xxx
//u8 M8266_CIPSTART[60]="AT+CIPSTART=\"TCP\",\"192.168.43.1\",10500\r\n";
u8 M8266_SAVETRANSLINK[60] = "AT+SAVETRANSLINK=1,\"192.168.0.166\",8083,\"TCP\"\r\n";//保存配网信息
//匿名发送数据格式 //匿名发送数据格式
//AA AA F1 21(4*8+1=33) ... test CHECK //4+32+1+1=38字节 8通道数据 //AA AA F1 21(4*8+1=33) ... test CHECK //4+32+1+1=38字节 8通道数据
...@@ -47,40 +40,6 @@ u8 Wifi_Sendbuf_Init(void) ...@@ -47,40 +40,6 @@ u8 Wifi_Sendbuf_Init(void)
} }
//发送指令,并判断指定字符串是否缓冲区中
//返回-1 没有指定的串
//0-125 字符串在数组中的位置
s16 ESP8266_SendCmd(u8* cmd, u8* result, u16 timeOut)
{
s16 res = -1;
if (NULL == strstr(USART2_RX_BUF, "+IPD,")) {
ESP8266_CLEAR();//清空缓冲区
}
USARTx_Send(ESP8266_UART,(uint8_t*) cmd, strlen(cmd));
while(timeOut > 0) {
timeOut --;
delay_ms(1);
res = Str_search(ESP8266_RX_BUF, ESP8266_RX_LEN, result);//查询字符串
if (res > 0) {
ESP8266_DEBUG("ESP8266 rsp:%s \r\n",ESP8266_RX_BUF);
return res;
}
}
return res;
}
s16 ESP8266_SendData(u8* cmd, int iLen)
{
s16 res;
USARTx_Send(ESP8266_UART,(uint8_t*) cmd, iLen);
return res;
}
//IO初始化 //IO初始化
void ESP8266_IO_Init(void) void ESP8266_IO_Init(void)
{ {
...@@ -100,225 +59,6 @@ void ESP8266_IO_Init(void) ...@@ -100,225 +59,6 @@ void ESP8266_IO_Init(void)
//ESP8266_RST=1; //复位 //ESP8266_RST=1; //复位
} }
u8 ESP8266_SET_FLAG=0;
//设置检测
void ESP8266_SET(void)
{
u16 ret=0;
if (KEYPWR == 0)//按键按下
{
LED_2=LED_ON;
while( KEYPWR == 0)
{
delay_ms(10);
ret++;
if ( ret > 300 )//3s
{
LED_2=LED_OFF;
ESP8266_SET_FLAG=1;//设置蓝牙
while( KEYPWR == 0);
return ;//退出函数
}
}
LED_2=LED_OFF;
}
}
void ESP8266_Config(void)
{
ESP8266_Goto_Cmd();//进入AT指令模式
ESP8266_DEBUG("设置工作模式:STA \r\n");
while(1)
{
if(ESP8266_SendCmd(CWMODE, "OK", 500) >= 0)//模块工作模式 设置AP模式
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("设置工作模式:单链接 \r\n");
while(1)
{
if(ESP8266_SendCmd(CIPMUX, "OK", 500) >= 0)//设置单链接模式,用于透传,开机默认单链接
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("\r\n等待连接WIFI\r\n");
while(1)
{
if(ESP8266_SendCmd(M8266_CWJAP, "OK", 1500) >= 0)//连接AP WIFI热点SSID和密码
break;
else
{
LED2=!LED2;
ESP8266_DEBUG("等待 ");
}
}
ESP8266_DEBUG("\r\n查看IP地址");
while(1)
{
if(ESP8266_SendCmd(CIFSR, "OK", 500) >= 0)//查询连接
break;
else
{
LED2=!LED2;
ESP8266_DEBUG("等待 ");
}
}
ESP8266_DEBUG("\r\n建立TCP连接 \r\n");
while(1)
{
if(ESP8266_SendCmd(M8266_SAVETRANSLINK, "OK", 500) >= 0)//建立TCP连接
break;
else
{
LED2=!LED2;
ESP8266_DEBUG("失败");
}
}
ESP8266_DEBUG("\r\n设置波特率透传 \r\n");
while(1)
{
if(ESP8266_SendCmd(ESP_USARTDEF, "OK", 500) >= 0)//设置波特率 及流控
break;
else
LED2=!LED2;
}
ESP8266_uart_init(ESP_BAUD); //初始化
ESP8266_out_Cmd();//退出指令模式
LED1=LED_OFF;
LED2=LED_OFF;
ESP8266_DEBUG("设置成功\r\n");
}
//进入AT指令模式
void ESP8266_Goto_Cmd(void)
{
delay_ms(500);
ESP8266_PWOEROFF;
delay_ms(500);
ESP8266_PWOERON;
// ESP8266_RST=0;
// delay_ms(500);
// ESP8266_RST=1;
// delay_ms(500);
ESP8266_DEBUG("进入AT指令模式\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");
return;
}
while(1)
{
ESP8266_DEBUG("当前波特率 115200\r\n");
ESP8266_uart_init(115200);
ESP8266_SendCmd("+++", "OK", 1200);//退出透传
if(ESP8266_SendCmd(AT, "OK", 500) >= 0) //模块有效性检查
{
break;
}
else
LED2=!LED2;
ESP8266_DEBUG("当前波特率 460800\r\n");
ESP8266_uart_init(460800);
ESP8266_SendCmd("+++", "OK", 1200);//退出透传
if(ESP8266_SendCmd(AT, "OK", 500) >= 0) //模块有效性检查
{
break;
}
else
LED2=!LED2;
ESP8266_DEBUG("当前波特率 921600\r\n");
ESP8266_uart_init(921600);
ESP8266_SendCmd("+++", "OK", 1200);//退出透传
if(ESP8266_SendCmd(AT, "OK", 500) >= 0) //模块有效性检查
{
break;
}
else
LED2=!LED2;
}
//ESP8266_SendCmd(RST, "OK", 500) ;//复位
//USART_ITConfig(ESP8266_UART, USART_IT_RXNE, DISABLE);//串口接收中断
}
//进入透传模式
void ESP8266_out_Cmd(void)
{
ESP8266_DEBUG("退出AT指令模式\r\n");
ESP8266_SendCmd(RST, "OK", 500) ;//复位
USART_ITConfig(ESP8266_UART, USART_IT_RXNE, DISABLE);//串口接收中断
}
void ESP8266_Config_Http_connectTcp(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_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;
}
pszIndex ++;
iLen --;
}
//ESP8266_CLEAR();
}
void ESP8266_Init(void) void ESP8266_Init(void)
{ {
ESP8266_PWOERON; ESP8266_PWOERON;
...@@ -326,249 +66,5 @@ void ESP8266_Init(void) ...@@ -326,249 +66,5 @@ void ESP8266_Init(void)
ESP8266_DEBUG("进入AT指令模式1111\r\n"); ESP8266_DEBUG("进入AT指令模式1111\r\n");
ESP8266_DEBUG("默认波特率 %d\r\n",ESP_BAUD); ESP8266_DEBUG("默认波特率 %d\r\n",ESP_BAUD);
ESP8266_uart_init(ESP_BAUD); ESP8266_uart_init(ESP_BAUD);
delay_s(2); delay_s(2);
//while (0) {
//Cyton_UartPraseLoop();
//CytonProcess_Loop();
//delay_ms(2);
//}
}
//串口配网
void Set_WIFI(void)
{
u8 u_recbuf[200];
u16 u_reclen;
Main_printf("开启AT配网\r\n");
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//串口接受中断
LED1=LED_OFF;
LED2=LED_OFF;
Main_printf("网络及IP设置\r\n\r\n");
Main_printf("AT配网,有效内容不要超60字节,例:\r\n\r\n");
Main_printf("设置名称密码 : AT+CWJAP_DEF=\"OPPORENO\",\"12345678\"\r\n");
Main_printf("设置TCP连接 : AT+SAVETRANSLINK=1,\"192.168.0.166\",8083,\"TCP\"\r\n");
Main_printf("退出设置 : AT+OVER\r\n\r\n");
while(1)
{
if(USART_RX_STA & 0x8000)//接收到数据
{
//搬运数据
u_reclen=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
memcpy(u_recbuf,USART_RX_BUF,u_reclen);//复制内容
USART_RX_STA=0;
if(u_recbuf[0]=='A' && u_recbuf[1]=='T' && u_recbuf[2]=='+')//AT指令
{
if( u_recbuf[3]=='C' && u_recbuf[4]=='W' && u_recbuf[5]=='J' && u_recbuf[6]=='A'
&& u_recbuf[7]=='P' && u_recbuf[8]=='_' && u_recbuf[9]=='D' && u_recbuf[10]=='E'
&& u_recbuf[11]=='F' && u_recbuf[12]=='=') //设置名称
{
Main_printf("设置名称密码指令:");
memset(M8266_CWJAP, 0, 60);
memcpy(M8266_CWJAP,u_recbuf,u_reclen);//复制内容
M8266_CWJAP[u_reclen] = 0x0d;
M8266_CWJAP[u_reclen+1] = 0x0a;
ESP8266_DEBUG("%s\r\n",M8266_CWJAP);
}
else if( u_recbuf[3]=='S' && u_recbuf[4]=='A' && u_recbuf[5]=='V' && u_recbuf[6]=='E'
&& u_recbuf[7]=='T' && u_recbuf[8]=='R' && u_recbuf[9]=='A' && u_recbuf[10]=='N'
&& u_recbuf[11]=='S' && u_recbuf[12]=='L' && u_recbuf[13]=='I' && u_recbuf[14]=='N'
&& u_recbuf[15]=='K' && u_recbuf[16]=='=') //设置名称
{
Main_printf("设置IP端口指令:");
memset(M8266_SAVETRANSLINK, 0, 60);
memcpy(M8266_SAVETRANSLINK,u_recbuf,u_reclen);//复制内容
M8266_SAVETRANSLINK[u_reclen] = 0x0d;
M8266_SAVETRANSLINK[u_reclen+1] = 0x0a;
ESP8266_DEBUG("%s\r\n",M8266_SAVETRANSLINK);
}
else if(u_recbuf[3]=='O' && u_recbuf[4]=='V' && u_recbuf[5]=='E' && u_recbuf[6]=='R') //设置完成
{
Main_printf("请等待设置完成\r\n");
break;
}
else
{
Main_printf("错误的指令\r\n");
}
}
}
else
{
delay_ms(10);
}
}
USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//关闭串口接受中断
//要设置的参数
Main_printf("要设置名称密码: %s",M8266_CWJAP);
Main_printf("要设置TCP连接: %s\r\n",M8266_SAVETRANSLINK);
ESP8266_Config(); //设置开机自动透传
LED1=LED_OFF;
LED2=LED_OFF;
}
void ESP8266_Config_Http_connectTcp(void)
{
ESP8266_Goto_Cmd();//进入AT指令模式
ESP8266_DEBUG("select version:\r\n");
while(1)
{
if(ESP8266_SendCmd("AT+GMR\r\n", "OK", 500) >= 0)//设置单链接模式,用于透传,开机默认单链接
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("设置工作模式:AP \r\n");
while(1)
{
/*Soft ap*/
if(ESP8266_SendCmd("AT+CWMODE_DEF=2\r\n", "OK", 500) >= 0)//模块工作模式 设置AP模式
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("Set Wifi Openbci open\r\n");
while(1)
{
/*Soft ap*/
if(ESP8266_SendCmd("AT+CWSAP_DEF=\"Openbci_1234\","",5,0\r\n", "OK", 500) >= 0)//模块工作模式 设置AP模式
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("Set Wifi ip 192.168.4.1\r\n");
while(1)
{
/*Soft ap*/
if(ESP8266_SendCmd("AT+CIPAP_DEF=\"192.168.4.1\",\"192.168.4.1\",\"255.255.255.0\"\r\n", "OK", 500) >= 0)//模块工作模式 设置AP模式
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("Set Wifi dhcp\r\n");
while(1)
{
/*Soft ap*/
if(ESP8266_SendCmd("AT+CWDHCP_DEF=0,1\r\n", "OK", 500) >= 0)//模块工作模式 设置AP模式
break;
else
LED2=!LED2;
}
ESP8266_Goto_Cmd();//进入AT指令模式
ESP8266_DEBUG("设置工作模式:非透传\r\n");
while(1)
{
if(ESP8266_SendCmd("AT+CIPMODE=0\r\n", "OK", 500) >= 0)//设置单链接模式,用于透传,开机默认单链接
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("设置工作模式:多链接 \r\n");
while(1)
{
if(ESP8266_SendCmd("AT+CIPMUX=1\r\n", "OK", 500) >= 0)//设置单链接模式,用于透传,开机默认单链接
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("设置工作模式:80\r\n");
while(1)
{
if(ESP8266_SendCmd("AT+CIPSERVER=1,80\r\n", "OK", 500) >= 0)//设置单链接模式,用于透传,开机默认单链接
break;
else
LED2=!LED2;
}
ESP8266_DEBUG("\r\n等待连接WIFI\r\n");
//CytonProcess_TimerCollStart();
while(1)
{
delay_ms(10);
//if (USART2_RX_LEN > 35)
// ESP8266_DEBUG("ESP8266 rsp (%d):%s \r\n",USART2_RX_LEN, ESP8266_RX_BUF);
if (USART2_RX_LEN == 20) {
//ESP8266_DEBUG("Start connect 1234\r\n");
/* ID MUST 0-4 */
//ESP8266_SendCmd("AT+CIPSTART=4,\"TCP\",\"192.168.4.2\",1234\r\n", "OK", 5000);
}
Ctron_Esp12Data_Loop();
//ESP8266_CLEAR();//清空缓冲区
CytonProcess_Loop();
//if(ESP8266_SendCmd(M8266_CWJAP, "OK", 1500) >= 0)//连接AP WIFI热点SSID和密码
// LED2=!LED2;
//break;
//else
//{
//LED2=!LED2;
//ESP8266_DEBUG("等待 ");
//}
}
ESP8266_DEBUG("\r\n查看IP地址");
while(1)
{
if(ESP8266_SendCmd(CIFSR, "OK", 500) >= 0)//查询连接
break;
else
{
LED2=!LED2;
ESP8266_DEBUG("等待 ");
}
}
ESP8266_DEBUG("\r\n建立TCP连接 \r\n");
while(1)
{
if(ESP8266_SendCmd(M8266_SAVETRANSLINK, "OK", 500) >= 0)//建立TCP连接
break;
else
{
LED2=!LED2;
ESP8266_DEBUG("失败");
}
}
ESP8266_DEBUG("\r\n设置波特率透传 \r\n");
while(1)
{
if(ESP8266_SendCmd(ESP_USARTDEF, "OK", 500) >= 0)//设置波特率 及流控
break;
else
LED2=!LED2;
}
ESP8266_uart_init(ESP_BAUD); //初始化
ESP8266_out_Cmd();//退出指令模式
LED1=LED_OFF;
LED2=LED_OFF;
ESP8266_DEBUG("设置成功\r\n");
} }
...@@ -25,9 +25,9 @@ ...@@ -25,9 +25,9 @@
#define ADS129x_WIFI_REC_EN 0 //WiFi接收使能 #define ADS129x_WIFI_REC_EN 0 //WiFi接收使能
#define WIFI_REC_LENGTH 1460 //接收缓冲区 #define WIFI_REC_LENGTH 1460 //接收缓冲区
//匿名上位机 //匿名上位机
#define WIFI_SEND_LENGTH 330 //发送缓冲区 一帧数据长度39一帧`次采样 33*10 99 39*37=1444 #define WIFI_SEND_LENGTH 99 //发送缓冲区 一帧数据长度39一帧`次采样 33*10 99 39*37=1444
#define WIFI_QUEUE_LENGTH (240) //(队列容量)缓冲区有效数据长度24*3=72 24*37 888 #define WIFI_QUEUE_LENGTH (72) //(队列容量)缓冲区有效数据长度24*3=72 24*37 888
#define WIFI_QUEUE_SIZE 20 //队列大小 #define WIFI_QUEUE_SIZE 50 //队列大小
///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////
//发送数据格式 //发送数据格式
typedef struct { typedef struct {
...@@ -46,43 +46,13 @@ extern _WIFI_Info *WIFI_Info ; //上传数据结构 ...@@ -46,43 +46,13 @@ extern _WIFI_Info *WIFI_Info ; //上传数据结构
#define ESP8266_DEBUG(...) #define ESP8266_DEBUG(...)
#endif #endif
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#define AT "AT\r\n"
#define CWMODE "AT+CWMODE_DEF=1\r\n" //设置STA模式
#define CWAUTOCONN "AT+CWAUTOCONN=1\r\n" //开机进入透传
#define RST "AT+RST\r\n"
#define CIPMUX "AT+CIPMUX=0\r\n" //设置单链接模式,用于透传,开机默认单链接
#define CIFSR "AT+CIFSR\r\n" //查询本地IP地址,只有连上AP后才能查询,返回OK 或者ERR
#define CIPMODE "AT+CIPMODE=1\r\n" //设置透传模式
#define CIPSEND "AT+CIPSEND\r\n" //发送数据,必须开启透传及单链接,换行返回>
//#define ESP_BAUD 460800 //波特率
////#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 (460800) //(460800) //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
////////////////////////////////////////////////////////////////////////////////
//TCP传输需要手动设置 WIFI名称 密码 IP地址 端口
extern u8 M8266_CWJAP[60]; //连接AP ssid: xxx 密码:xxx
extern u8 M8266_SAVETRANSLINK[60];//保存配网信息
extern u8 ESP8266_SET_FLAG;
s16 ESP8266_SendCmd(u8* cmd, u8* result, u16 timeOut);
s16 ESP8266_SendData(u8* cmd, int iLen);
void ESP8266_IO_Init(void); void ESP8266_IO_Init(void);
void ESP8266_Goto_Cmd(void);
void ESP8266_out_Cmd(void);
void ESP8266_Init(void); void ESP8266_Init(void);
void ESP8266_Config(void);
void ESP8266_SET(void); //配网检测
void Set_WIFI(void);//配网设置
u8 Wifi_Sendbuf_Init(void); u8 Wifi_Sendbuf_Init(void);
......
...@@ -204,7 +204,14 @@ void TIM4_IRQHandler(void) ...@@ -204,7 +204,14 @@ void TIM4_IRQHandler(void)
} }
} }
DS1=!DS1; DS1=!DS1;
if (1 == CytonSD_GetStatus()) {
LED_2 = LED_ON;
} else if (2 == CytonSD_GetStatus()) {
DS2 = !DS2;
}
TIM_ClearITPendingBit(TIM4, TIM_IT_Update);//清中断标志 TIM_ClearITPendingBit(TIM4, TIM_IT_Update);//清中断标志
} }
......
...@@ -99,18 +99,18 @@ void Change_Mode(void) ...@@ -99,18 +99,18 @@ void Change_Mode(void)
if(KEY_TYPE) if(KEY_TYPE)
{ {
//__disable_irq(); //__disable_irq();
delay_s(2); delay_s(1);
LED_2=LED_OFF; LED_2=LED_OFF;
if(KEY_TYPE == KEY_PWR) if(KEY_TYPE == KEY_PWR)
{ {
EXTI->IMR &= ~(ADS129X_DRDY_LINE);//屏蔽外部中断 EXTI->IMR &= ~(ADS129X_DRDY_LINE);//屏蔽外部中断
work_state++; //work_state++;
if(work_state == 4) //if(work_state == 4)
work_state=1; // work_state=1;
CytonEsp12_KeySaveSD();
//printf("切换工作模式\r\n"); printf("切换工作模式 %d\r\n", work_state);
} }
KEY_TYPE=0; KEY_TYPE=0;
} }
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -149,7 +149,7 @@ ...@@ -149,7 +149,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key> <Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U303030303030303030303031 -I0 -O9422 -S1 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO31 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash/STM32F10x_128.FLM)</Name> <Name>-U303030303030303030303031 -I0 -O9422 -S1 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO31 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash/STM32F10x_128.FLM)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
...@@ -178,14 +178,14 @@ ...@@ -178,14 +178,14 @@
<Type>0</Type> <Type>0</Type>
<LineNumber>72</LineNumber> <LineNumber>72</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
<Address>134234958</Address> <Address>134233810</Address>
<ByteObject>0</ByteObject> <ByteObject>0</ByteObject>
<HtxType>0</HtxType> <HtxType>0</HtxType>
<ManyObjects>0</ManyObjects> <ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject> <SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess> <BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount> <BreakIfRCount>1</BreakIfRCount>
<Filename>C:\Users\Peiki\Desktop\DINGZHI\ADS1299 V2.1\2021-07-11 STM32F103C8 2.3.3锛堝彂璐у浐浠讹級浼樺寲椹卞姩绋嬪簭 閰嶅ADS1299 2.1.0\Hardware\hc05.c</Filename> <Filename>..\Hardware\hc05.c</Filename>
<ExecCommand></ExecCommand> <ExecCommand></ExecCommand>
<Expression>\\STM32F103C8T6\../Hardware/hc05.c\72</Expression> <Expression>\\STM32F103C8T6\../Hardware/hc05.c\72</Expression>
</Bp> </Bp>
...@@ -194,17 +194,33 @@ ...@@ -194,17 +194,33 @@
<Type>0</Type> <Type>0</Type>
<LineNumber>74</LineNumber> <LineNumber>74</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
<Address>134234970</Address> <Address>134233830</Address>
<ByteObject>0</ByteObject> <ByteObject>0</ByteObject>
<HtxType>0</HtxType> <HtxType>0</HtxType>
<ManyObjects>0</ManyObjects> <ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject> <SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess> <BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount> <BreakIfRCount>1</BreakIfRCount>
<Filename>C:\Users\Peiki\Desktop\DINGZHI\ADS1299 V2.1\2021-07-11 STM32F103C8 2.3.3锛堝彂璐у浐浠讹級浼樺寲椹卞姩绋嬪簭 閰嶅ADS1299 2.1.0\Hardware\hc05.c</Filename> <Filename>..\Hardware\hc05.c</Filename>
<ExecCommand></ExecCommand> <ExecCommand></ExecCommand>
<Expression>\\STM32F103C8T6\../Hardware/hc05.c\74</Expression> <Expression>\\STM32F103C8T6\../Hardware/hc05.c\74</Expression>
</Bp> </Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>217</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134226424</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\main.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\STM32F103C8T6\main.c\217</Expression>
</Bp>
</Breakpoint> </Breakpoint>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
...@@ -1015,6 +1031,19 @@ ...@@ -1015,6 +1031,19 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Cyton\Cyton_SD.c</PathWithFileName>
<FilenameWithoutPath>Cyton_SD.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>
...@@ -1025,7 +1054,7 @@ ...@@ -1025,7 +1054,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>8</GroupNumber> <GroupNumber>8</GroupNumber>
<FileNumber>56</FileNumber> <FileNumber>57</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>0</Focus> <Focus>0</Focus>
......
...@@ -671,7 +671,7 @@ ...@@ -671,7 +671,7 @@
<RVCTZI>0</RVCTZI> <RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData> <RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection> <ModuleSelection>0</ModuleSelection>
<IncludeInBuild>0</IncludeInBuild> <IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild> <AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>2</GenerateAssemblyFile> <GenerateAssemblyFile>2</GenerateAssemblyFile>
<AssembleAssemblyFile>2</AssembleAssemblyFile> <AssembleAssemblyFile>2</AssembleAssemblyFile>
...@@ -739,7 +739,7 @@ ...@@ -739,7 +739,7 @@
<RVCTZI>0</RVCTZI> <RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData> <RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection> <ModuleSelection>0</ModuleSelection>
<IncludeInBuild>0</IncludeInBuild> <IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild> <AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>2</GenerateAssemblyFile> <GenerateAssemblyFile>2</GenerateAssemblyFile>
<AssembleAssemblyFile>2</AssembleAssemblyFile> <AssembleAssemblyFile>2</AssembleAssemblyFile>
...@@ -853,6 +853,11 @@ ...@@ -853,6 +853,11 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\Cyton\cyton_cmd_pub.c</FilePath> <FilePath>..\Cyton\cyton_cmd_pub.c</FilePath>
</File> </File>
<File>
<FileName>Cyton_SD.c</FileName>
<FileType>1</FileType>
<FilePath>..\Cyton\Cyton_SD.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "malloc.h" #include "malloc.h"
#include <string.h> #include <string.h>
#include "adc.h" #include "adc.h"
#include "fattester.h"
...@@ -90,7 +91,6 @@ ...@@ -90,7 +91,6 @@
//2000采样率, 数据量78KB/s(波特率921600) //2000采样率, 数据量78KB/s(波特率921600)
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
//函数区 //函数区
void Send_BlueTooth(void);//蓝牙串口发送
void Send_ESP8266(void); void Send_ESP8266(void);
void Send_UART1(void); void Send_UART1(void);
void SoftReset(void);//软件复位 void SoftReset(void);//软件复位
...@@ -98,9 +98,99 @@ ...@@ -98,9 +98,99 @@
//变量区 //变量区
static u8 sd_path[] = "0:";
void test_sd()
{
int iRet = 0;
FIL file;
char szBuf[1024]= {0};
int iLoop = 0;
int iWriten;
int iFileIndex = 0;
char szFileName[64] = 0;
char szAbFileName[66] = 0;
memset(szBuf, 0x31, 1024);
#if 1
for (iLoop = 0; iLoop < 256; iLoop ++) {
szBuf[iLoop] = iLoop;
}
CytonSD_Init();
CytonSD_Start();
Main_printf("CytonSD_WriteChannelData Test\n ");
CytonSD_WriteChannelData(szBuf, 8, 3);
CytonSD_WriteChannelData(szBuf, 8, 3);
CytonSD_WriteChannelData(szBuf, 8, 3);
CytonSD_WriteChannelData(szBuf, 8, 3);
CytonSD_WriteChannelData(szBuf, 8, 3);
CytonSD_WriteChannelData(szBuf, 8, 3);
CytonSD_Stop();
Main_printf("CytonSD_WriteChannelData End\n ");
return;
#endif
exfuns_init();
iRet = mf_mount(sd_path, 1);
Main_printf("mount end %d\r\n", iRet);
mf_scan_files("0:");
mf_showfree("0:");
for (iLoop = 0; iLoop < 256; iLoop ++) {
memset(szFileName, 0, sizeof(szFileName));
sprintf(szFileName, "OPBI_%d.txt", iLoop);
if (0 == mf_scan_fileExist("0:", szFileName)) {
Main_printf("file is not exist, start creat %s\r\n", szFileName);
sprintf(szAbFileName, "0:%s", szFileName);
break;
}
}
Main_printf("start Write %d Kb to %s\r\n", 256, szAbFileName);
iRet = f_open(&file, szAbFileName, FA_CREATE_NEW | FA_WRITE);
Main_printf("f_open %d\r\n", iRet);
//f_lseek(&file, 1024*1024);
f_sync(&file);
//f_lseek(&file, 0);
for (iLoop = 0; iLoop < 256; iLoop ++) {
iRet = f_write(&file, szBuf, 512, &iWriten);
if (iRet != 0) {
Main_printf("[%d] %d iWriten %d failed\r\n", iLoop, iRet, iWriten);
break;
}
f_sync(&file);
}
f_close(&file);
Main_printf("[%d] %d iWriten %d Success\r\n", iLoop, iRet, iWriten);
//f_lseek(&file, 256*1024);
#if 0
Main_printf("start Write %d Kb\r\n", 256);
for (iLoop = 0; iLoop < 256; iLoop ++) {
iRet = f_open(&file, "0:201712013.txt", FA_OPEN_EXISTING | FA_WRITE);
Main_printf("f_open %d\r\n", iRet);
f_lseek(&file, f_size(&file));
iRet = f_write(&file, szBuf, 1024, &iWriten);
Main_printf("%d iWriten %d\r\n", iRet, iWriten);
f_close(&file);
}
#endif
//f_close(&file);
Main_printf("end Write %d Kb\r\n", 256);
}
//main //main
int main(void) int main(void)
{ {
work_state = SEND_WIFI; work_state = SEND_WIFI;
//work_state=SEND_WIFI; //work_state=SEND_WIFI;
//work_state=SEND_UART; //work_state=SEND_UART;
...@@ -109,11 +199,6 @@ int main(void) ...@@ -109,11 +199,6 @@ int main(void)
//初始化系统时钟 72M //初始化系统时钟 72M
SystemInit(); SystemInit();
delay_init(); delay_init();
// uart3_init(115200);
// while(1) {
// Main_printf("Test\r\n");
// delay_ms(1000);
// }
LED_Init(); LED_Init();
KEY_Init(); //初始化按键 KEY_Init(); //初始化按键
...@@ -122,11 +207,14 @@ int main(void) ...@@ -122,11 +207,14 @@ int main(void)
HCO5_IO_Init(); //关蓝牙电源 HCO5_IO_Init(); //关蓝牙电源
ESP8266_IO_Init();//关WIFI电源 ESP8266_IO_Init();//关WIFI电源
ESP8266_PWOERON; ESP8266_PWOERON;
uart1_init(921600);//串口初始化 uart1_init(921600);//串口初始化
//while(Power_ON());//按键开机检测 CytonSys_StartupTimerInit();
//while(Power_ON());//按键开机检测
POWER_ON;
Main_printf("Turn on\r\n"); Main_printf("Turn on\r\n");
Main_printf("Version STM32F103C8 V2.5.2 ADS1299 V2.2 2022-05-20\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); Main_printf("Current ads129x device id %d\r\n",ADS129X_DEVICE);
CytonSD_Init();
delay_ms(200); delay_ms(200);
///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
TIM2_Init(500,7200); //按键检测+按键消抖 TIM2_Init(500,7200); //按键检测+按键消抖
...@@ -138,6 +226,8 @@ int main(void) ...@@ -138,6 +226,8 @@ int main(void)
ADC_DMA_Config(ADCConvertedValue,1); ADC_DMA_Config(ADCConvertedValue,1);
ADC_DMA_Enable(); ADC_DMA_Enable();
Main_printf("Enable DMA ADC\r\n"); Main_printf("Enable DMA ADC\r\n");
//test_sd();
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
//初始化串口结构 //初始化串口结构
UART_Info =(_UART_Info*)mymalloc(sizeof(_UART_Info)); //数据结构 UART_Info =(_UART_Info*)mymalloc(sizeof(_UART_Info)); //数据结构
...@@ -155,149 +245,9 @@ int main(void) ...@@ -155,149 +245,9 @@ int main(void)
{ {
Send_ESP8266(); Send_ESP8266();
continue; continue;
if(work_state == SEND_BULE)
Send_BlueTooth();
else if(work_state == SEND_WIFI)
Send_ESP8266();
else if(work_state == SEND_UART)
Send_UART1();
}
}
//蓝牙发送
void Send_BlueTooth(void)
{
u16 i,j,z,k=1,res;
u8 addcheck=0,sumcheck=0;
Main_printf("蓝牙发送\r\n");
TIM_Cmd(TIM4, DISABLE);
/////////////////////////////////////////////////////////////////
//初始化129X
#if ADS129X_DEVICE == ADS1299
ADS129x_REG_BUF[1]=0xD5; //500采样率
#elif ADS129X_DEVICE == ADS1298
ADS129x_REG_BUF[1]=0x86; //500采样率
#endif
ADS129x_ReInit(0, 0);//初始化1299
/////////////////////////////////////////////////////////////////
Main_printf("申请串口缓存,内存当前占用 %d\r\n",mem_perused());
UART_Info->sendbuf = (u8*)mymalloc(UART_SEND_LENGTH); //发送缓冲区
UART_Info->USART_Queue=queue_init(UART_QUEUE_SIZE,UART_QUEUE_LENGTH) ;//循环队列初始化大小
if(UART_Info->sendbuf == NULL || UART_Info->USART_Queue == NULL )
{
Main_printf("内存申请失败\r\n");
}
else
{
Main_printf("内存申请成功,当前占用 %d\r\n",mem_perused());
}
/////////////////////////////////////////////////////////////////
if(!KE_4)//开启蓝牙设置检测
{
Main_printf("蓝牙设置检测\r\n");
TIM4_Init(3000,7200); //检测是否设置蓝牙
TIM4_Timing=0;
HC05_SET_FLAG=0;
while(HC05_SET_FLAG==0 && TIM4_Timing<10)
HC05_SET();//检测蓝牙按键
if(HC05_SET_FLAG)//设置蓝牙
{
LED_1=LED_OFF;
LED_2=LED_OFF;
Main_printf("开始设置蓝牙\r\n");
res=HCO5_AT_Confg();//开始设置
if(res)
Main_printf("蓝牙设置失败\r\n");
else
Main_printf("蓝牙设置成功\r\n");
Main_printf("重启\r\n");
TIM_Cmd(TIM4, ENABLE); //灯闪烁
delay_s(3);
TIM_Cmd(TIM4, DISABLE);//关灯
POWER_OFF;//关机
SoftReset();
}
}
//////////////////////////////////////////////////////////////////
Main_printf("开启蓝牙串口及DMA中断\r\n");
HC05_ON;//开蓝牙
uart3_init(460800);//串口初始化 HC05串口
DMA_Config(DMA1_Channel2,(u32)&USART3->DR,(u32)UART_Info->sendbuf);
USART_DMACmd(USART3,USART_DMAReq_Tx,ENABLE); //DMA
UART3_DMA_TX_NVIC_Config(1);//开启串口 DMA中断
/////////////////////////////////////////////////////////////////
UART_Info->sendbuf[0]=0xAA;
UART_Info->sendbuf[1]=0xFF;
UART_Info->sendbuf[2]=0xF1;
UART_Info->sendbuf[3]=33; //发送个8通道的数据 + 1字节丢包测试
/////////////////////////////////////////////////////////////////
Main_printf("开始发送数据\r\n");
LED_1=LED_ON;
LED_2=LED_ON;
power_detective=1;
lowpower=0;
UART3_DMA_Finish=1;
KEY_TYPE=0;
delay_s(1);
LED_1=LED_OFF;
LED_2=LED_OFF;
TIM4_Init(10000,7200); //系统指示灯
EXTI->IMR |= ADS129X_DRDY_LINE;//开DRDY中断
while(work_state==SEND_BULE)//蓝牙发送
{
Key_Scan();
Change_Mode();
//////////////////////////////////////////////////////////////////////////////////////////////////
if(UART3_DMA_Finish==1) //上一个DMA已经发送完成
{
//从队列中取出数据并处理
if(serch_queue_data(UART_Info->USART_Queue))//队列有数据
{
for(i=0;i<8;i++)//处理8个通道的数据
{
ADS129x_info.cannle[i] = *(*(UART_Info->USART_Queue->databuf + UART_Info->USART_Queue->front)+0+i*3)<<16
| *(*(UART_Info->USART_Queue->databuf + UART_Info->USART_Queue->front)+1+i*3)<<8
| *(*(UART_Info->USART_Queue->databuf + UART_Info->USART_Queue->front)+2+i*3);//获取原始数据
ADS129x_info.p_Temp[i] = get_volt(ADS129x_info.cannle[i]); //转成32位有符号数
ADS129x_info.cannle[i] = ADS129x_info.p_Temp[i];//赋值给无符号数,准备逻辑右移
UART_Info->sendbuf[4+i*4]=ADS129x_info.cannle[i]>>0;
UART_Info->sendbuf[5+i*4]=ADS129x_info.cannle[i]>>8;
UART_Info->sendbuf[6+i*4]=ADS129x_info.cannle[i]>>16;
UART_Info->sendbuf[7+i*4]=ADS129x_info.cannle[i]>>24;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//递增测试信号
UART_Info->sendbuf[(ADS129X_USE_CANNLE+1)*4 ]=res++;//0-255
//校验位
sumcheck = 0;
addcheck=0;
for(i=0;i< (ADS129X_USE_CANNLE+1)*4 +1 ;i++)
{
sumcheck += UART_Info->sendbuf[i];
addcheck += sumcheck;
}
UART_Info->sendbuf[(ADS129X_USE_CANNLE+1)*4 +1] = sumcheck; //校验
UART_Info->sendbuf[(ADS129X_USE_CANNLE+1)*4 +2] = addcheck; //校验
DMA_Enable(DMA1_Channel2,(ADS129X_USE_CANNLE+1)*4 +3);//开启DMA
UART3_DMA_Finish=0;
UART_Info->USART_Queue->front = (UART_Info->USART_Queue->front+1) % UART_Info->USART_Queue->capacity;//取数据,队头自增,存数据,队尾自增
}
}
} }
EXTI->IMR &= ~(ADS129X_DRDY_LINE);//屏蔽外部中断
TIM_Cmd(TIM4, DISABLE);
HC05_OFF;//关蓝牙
queue_Deinit(UART_Info->USART_Queue);//循环队列注销
myfree(UART_Info->sendbuf);//释放内存
power_detective=0;
Main_printf("切换工作模式\r\n");
Main_printf("内存当前占用 %d\r\n",mem_perused());
} }
//主串口发送 //主串口发送
void Send_UART1(void) void Send_UART1(void)
{ {
...@@ -401,118 +351,6 @@ void Send_UART1(void) ...@@ -401,118 +351,6 @@ void Send_UART1(void)
Main_printf("内存当前占用 %d\r\n",mem_perused()); Main_printf("内存当前占用 %d\r\n",mem_perused());
} }
void TEST_ESP8266(void)
{
u16 i,j,z,k=1,res;
u8 addcheck=0,sumcheck=0;
u8 datanum=0;
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, 0);//初始化1299
/////////////////////////////////////////////////////////////////
Main_printf("内存当前占用 %d\r\n",mem_perused());
WIFI_Info =(_WIFI_Info*)mymalloc(sizeof(_WIFI_Info)); //数据结构
WIFI_Info->sendbuf = (u8*)mymalloc(WIFI_SEND_LENGTH); //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");
Main_printf("开启DMA及中断11111111\r\n");
ESP8266_Init();//初始化
DMA_Config(DMA1_Channel7,(u32)&USART2->DR,(u32)WIFI_Info->sendbuf);
UART2_DMA_TX_NVIC_Config(1);//开启串口 DMA中断
USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //DMA
///////////////////////////////////////////////////////////////////////////////////
Wifi_Sendbuf_Init(); //初始化发送缓冲区
///////////////////////////////////////////////////////////////////////////////////
Main_printf("开始发送数据\r\n");
LED_1=LED_ON;
LED_2=LED_ON;
power_detective=1;
lowpower=0;
UART2_DMA_Finish=1;
KEY_TYPE=0;
delay_s(1);
LED_1=LED_OFF;
LED_2=LED_OFF;
TIM4_Init(10000,7200); //系统指示灯
EXTI->IMR |= ADS129X_DRDY_LINE;//开DRDY中断
///////////////////////////////////////////////////////////////////////////////////
while(work_state==SEND_WIFI)//WIFI发送,
{
Key_Scan();
Change_Mode();
if(WIFI_Info->WIFI_Queue->Queue_Full_flag==1)
{
WIFI_Info->WIFI_Queue->Queue_Full_flag=0;
Main_printf("WIFI queue full ");
}
if(UART2_DMA_Finish==1)
{
if(serch_queue_data(WIFI_Info->WIFI_Queue))//队列有数据
{
for(j=0;j<ADS129x_info.Ads129x_Write_Num;j++)//一帧N次采样的数据
{
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
| *(*(WIFI_Info->WIFI_Queue->databuf + WIFI_Info->WIFI_Queue->front)+1+i*3+j*ADS129x_info.Ads129x_Data_Move)<<8
| *(*(WIFI_Info->WIFI_Queue->databuf + WIFI_Info->WIFI_Queue->front)+2+i*3+j*ADS129x_info.Ads129x_Data_Move);//获取原始数据
ADS129x_info.p_Temp[i] = get_volt(ADS129x_info.cannle[i]); //转成32位有符号数
ADS129x_info.cannle[i] = ADS129x_info.p_Temp[i];//赋值给无符号数,准备逻辑右移
WIFI_Info->sendbuf[4+i*4+j*WIFI_Info->datalength]=ADS129x_info.cannle[i];
WIFI_Info->sendbuf[5+i*4+j*WIFI_Info->datalength]=ADS129x_info.cannle[i]>>8;
WIFI_Info->sendbuf[6+i*4+j*WIFI_Info->datalength]=ADS129x_info.cannle[i]>>16;
WIFI_Info->sendbuf[7+i*4+j*WIFI_Info->datalength]=ADS129x_info.cannle[i]>>24;
}
//递增测试信号
WIFI_Info->sendbuf[ (ADS129X_USE_CANNLE+1)*4 +j*WIFI_Info->datalength]=res++;//0-255
//校验位
sumcheck = 0; addcheck=0;
for(i=0;i< (ADS129X_USE_CANNLE+1)*4 +1 ;i++)
{
sumcheck += WIFI_Info->sendbuf[i +j*WIFI_Info->datalength ];
addcheck += sumcheck;
}
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; //校验
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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;//取数据,队头自增,存数据,队尾自增
}
}
}
EXTI->IMR &= ~(ADS129X_DRDY_LINE);//屏蔽外部中断
TIM_Cmd(TIM4, DISABLE);
ESP8266_PWOEROFF;//关WIFI
queue_Deinit(WIFI_Info->WIFI_Queue);//释放内存
myfree(WIFI_Info->sendbuf);//释放内存
myfree(WIFI_Info);//释放内存
power_detective=0;
Main_printf("切换工作模式\r\n");
Main_printf("内存当前占用 %d\r\n",mem_perused());
}
uint8_t g_aucSendIndexData = 0; uint8_t g_aucSendIndexData = 0;
int iDebug = 0; int iDebug = 0;
...@@ -613,7 +451,7 @@ void Send_ESP8266(void) ...@@ -613,7 +451,7 @@ void Send_ESP8266(void)
//testLoop(); //testLoop();
/* Loop Message. */ /* Loop Message. */
Cyton_UartPraseLoop(); CytonEsp12_PraseLoop();
if(UART2_DMA_Finish==1) if(UART2_DMA_Finish==1)
{ {
...@@ -622,33 +460,6 @@ void Send_ESP8266(void) ...@@ -622,33 +460,6 @@ void Send_ESP8266(void)
//delay_ms(1); //delay_ms(1);
for(j=0;j<ADS129x_info.Ads129x_Write_Num;j++)//一帧N次采样的数据 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
| *(*(WIFI_Info->WIFI_Queue->databuf + WIFI_Info->WIFI_Queue->front)+1+i*3+j*ADS129x_info.Ads129x_Data_Move)<<8
| *(*(WIFI_Info->WIFI_Queue->databuf + WIFI_Info->WIFI_Queue->front)+2+i*3+j*ADS129x_info.Ads129x_Data_Move);//获取原始数据
ADS129x_info.p_Temp[i] = get_volt(ADS129x_info.cannle[i]); //转成32位有符号数
ADS129x_info.cannle[i] = ADS129x_info.p_Temp[i];//赋值给无符号数,准备逻辑右移
WIFI_Info->sendbuf[4+i*4+j*WIFI_Info->datalength]=ADS129x_info.cannle[i];
WIFI_Info->sendbuf[5+i*4+j*WIFI_Info->datalength]=ADS129x_info.cannle[i]>>8;
WIFI_Info->sendbuf[6+i*4+j*WIFI_Info->datalength]=ADS129x_info.cannle[i]>>16;
WIFI_Info->sendbuf[7+i*4+j*WIFI_Info->datalength]=ADS129x_info.cannle[i]>>24;
}
//递增测试信号
WIFI_Info->sendbuf[ (ADS129X_USE_CANNLE+1)*4 +j*WIFI_Info->datalength]=res++;//0-255
//校验位
sumcheck = 0; addcheck=0;
for(i=0;i< (ADS129X_USE_CANNLE+1)*4 +1 ;i++)
{
sumcheck += WIFI_Info->sendbuf[i +j*WIFI_Info->datalength ];
addcheck += sumcheck;
}
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*/ /* 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] = 0xA0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 1] = g_aucSendIndexData ++; WIFI_Info->sendbuf[j * WIFI_Info->datalength + 1] = g_aucSendIndexData ++;
...@@ -662,13 +473,15 @@ void Send_ESP8266(void) ...@@ -662,13 +473,15 @@ void Send_ESP8266(void)
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 30] = 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 + 31] = 0x0;
WIFI_Info->sendbuf[j * WIFI_Info->datalength + 32] = 0xC0; 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 DMA_Enable(DMA1_Channel7,WIFI_SEND_LENGTH);//开启DMA
UART2_DMA_Finish=0; UART2_DMA_Finish=0;
if (CytonEsp12_GetSDSaveMs() > 0) {
CytonSD_WriteChannelData(*(WIFI_Info->WIFI_Queue->databuf + WIFI_Info->WIFI_Queue->front), 8, ADS129x_info.Ads129x_Write_Num);
}
WIFI_Info->WIFI_Queue->front = (WIFI_Info->WIFI_Queue->front+1) % WIFI_Info->WIFI_Queue->capacity;//取数据,队头自增,存数据,队尾自增 WIFI_Info->WIFI_Queue->front = (WIFI_Info->WIFI_Queue->front+1) % WIFI_Info->WIFI_Queue->capacity;//取数据,队头自增,存数据,队尾自增
if (iDebug ++ % 1000 == 0) { 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", 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",
...@@ -693,17 +506,6 @@ void Send_ESP8266(void) ...@@ -693,17 +506,6 @@ void Send_ESP8266(void)
Main_printf("内存当前占用 %d\r\n",mem_perused()); Main_printf("内存当前占用 %d\r\n",mem_perused());
} }
//TF存储
void Write_TF(void)
{
}
void SoftReset(void)//软件复位 void SoftReset(void)//软件复位
{ {
//__disable_irq()只是禁止CPU去响应中断,没有真正的去屏蔽中断的触发 //__disable_irq()只是禁止CPU去响应中断,没有真正的去屏蔽中断的触发
...@@ -711,30 +513,3 @@ void SoftReset(void)//软件复位 ...@@ -711,30 +513,3 @@ void SoftReset(void)//软件复位
__set_FAULTMASK(1); // 关闭所有中断 __set_FAULTMASK(1); // 关闭所有中断
NVIC_SystemReset(); // 复位 NVIC_SystemReset(); // 复位
} }
/**********************************************************************
编译结果里面的几个数据的意义:
Code:表示程序所占用 FLASH 的大小(FLASH)
RO-data:即 Read Only-data, 表示程序定义的常量,如 const 类型(FLASH)
RW-data:即 Read Write-data, 表示已被初始化的全局变量(SRAM)
ZI-data:即 Zero Init-data, 表示未被初始化的全局变量(SRAM)
***********************************************************************/
//由上图可知,重映射的方式一共有三种。分别描述如下:
//1.GPIO_Remap_SWJ_JTAGDisable: /*!< JTAG-DP Disabled and SW-DP Enabled */ 即能用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试
//2.GPIO_Remap_SWJ_Disable: /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */ 5个引脚全为普通引脚,但不能再用JTAG&SWD仿真器调试,只能用st-link调试
//3.GPIO_Remap_SWJ_NoJTRST: /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */PB4可为普通IO口,JTAG&SWD正常使用,但JTAG没有复位
//如果你用到所有的五个引脚当做普通IO口,那么上述步骤二中的重映射配置应写为GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
//如果你用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试,则重映射配置应写为GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//同理可配置只用PB4可为普通IO口的情况。
// DMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)data_to_send2);
// USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //DMA
// DMA_Config(DMA1_Channel7,(u32)&USART2->DR,(u32)data_to_send3);
// USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //DMA
// DMA_Config(DMA1_Channel2,(u32)&USART3->DR,(u32)data_to_send3);
// USART_DMACmd(USART3,USART_DMAReq_Tx,ENABLE); //DMA
\ No newline at end of file
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