Explorar el Código

增加RTC模块代码

zhoutao hace 3 semanas
padre
commit
2cbe5b0aad

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3 - 4
ips8000v3.uvguix.zt200


+ 31 - 4
ips8000v3.uvoptx

@@ -148,7 +148,24 @@
           <Name>-U-O206 -O206 -S9 -C0 -P00 -N00("") -D00(00000000) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F429IGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>173</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134745184</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>.\src\exti\exti.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\ips8000v3\src/exti/exti.c\173</Expression>
+        </Bp>
+      </Breakpoint>
       <WatchWindow1>
         <Ww>
           <count>0</count>
@@ -212,6 +229,16 @@
           <WinNumber>2</WinNumber>
           <ItemText>g_stSyncTimerParam</ItemText>
         </Ww>
+        <Ww>
+          <count>11</count>
+          <WinNumber>2</WinNumber>
+          <ItemText>pbyData</ItemText>
+        </Ww>
+        <Ww>
+          <count>12</count>
+          <WinNumber>2</WinNumber>
+          <ItemText>abyStatus</ItemText>
+        </Ww>
       </WatchWindow2>
       <MemoryWindow1>
         <Mm>
@@ -1379,7 +1406,7 @@
 
   <Group>
     <GroupName>src</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -1455,7 +1482,7 @@
 
   <Group>
     <GroupName>src/sysrcc</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -2335,7 +2362,7 @@
 
   <Group>
     <GroupName>src/exti</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>

+ 134 - 33
src/exti/exti.c

@@ -13,17 +13,19 @@ static uint8 gExti_bySyncTimerEnabled = 1; // 同步定时使能,0:无效,
 // 外部中断模块初始化
 void exti_init()
 {
-    exti_init_rx_pps1(); // 初始化接收同步PPS1信号外部中断线
-    exti_init_tx_sync(); // 初始化发送同步信号外部中断线
-
-    // 清除3个中断标识位
-    EXTI_ClearITPendingBit(EXTI_Line0);
-    EXTI_ClearITPendingBit(EXTI_Line4);
+    // exti_init_pps_bd(); // 初始化北斗PPS信号外部中断,
+    exti_init_pps_cpld(); // 初始化CPLD的PPS信号外部中断
+    exti_init_tx_sync();  // 初始化同步信号发送外部中断
+
+    // 清除4个中断标识位
+    // EXTI_ClearITPendingBit(EXTI_BD_LINE);
+    EXTI_ClearITPendingBit(EXTI_CPLD_LINE);
+    EXTI_ClearITPendingBit(EXTI_SYNC_LINE);
     sync_rxtx_update_tx_cplt_flag(2);
 }
 
-// 初始化exti0(接收1号北斗PPS信号)
-void exti_init_rx_pps1()
+// 初始化外部中断(北斗PPS信号)
+void exti_init_pps_bd()
 {
     GPIO_InitTypeDef stGpio = {0};
     EXTI_InitTypeDef stExti = {0};
@@ -33,19 +35,18 @@ void exti_init_rx_pps1()
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
 
     // 初始化GPIO管脚
-    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
-    stGpio.GPIO_Mode = GPIO_Mode_IN; // 管脚模式,输入模式
-    // stGpio.GPIO_OType = GPIO_OType_OD; // 管脚输出类型,在输入模式下可以不配置
+    RCC_AHB1PeriphClockCmd(EXTI_BD_RCC_PERIPH, ENABLE);
+    stGpio.GPIO_Mode = GPIO_Mode_IN;   // 管脚模式,输入模式
     stGpio.GPIO_PuPd = GPIO_PuPd_DOWN; // 下拉,平时保持低电平
     stGpio.GPIO_Speed = GPIO_Speed_50MHz;
-    stGpio.GPIO_Pin = GPIO_Pin_0;
-    GPIO_Init(GPIOB, &stGpio);
+    stGpio.GPIO_Pin = EXTI_BD_GPIO_PIN;
+    GPIO_Init(EXTI_BD_GPIO_PORT, &stGpio);
 
     // 配置GPIO管脚与exti线间的映射关系
-    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource0);
+    SYSCFG_EXTILineConfig(EXTI_BD_SOURCE_PORT, EXTI_BD_SOURCE_PIN);
 
     // 配置外部中断参数
-    stExti.EXTI_Line = EXTI_Line0;
+    stExti.EXTI_Line = EXTI_BD_LINE;
     stExti.EXTI_Mode = EXTI_Mode_Interrupt;
     stExti.EXTI_Trigger = EXTI_Trigger_Rising;
     stExti.EXTI_LineCmd = ENABLE;
@@ -53,7 +54,7 @@ void exti_init_rx_pps1()
     EXTI_Init(&stExti);
 
     // 配置中断
-    stNvic.NVIC_IRQChannel = EXTI0_IRQn;
+    stNvic.NVIC_IRQChannel = EXTI_BD_IRQ_CHANNEL;
     stNvic.NVIC_IRQChannelPreemptionPriority = 0;
     stNvic.NVIC_IRQChannelSubPriority = 0;
     stNvic.NVIC_IRQChannelCmd = ENABLE;
@@ -69,10 +70,110 @@ void EXTI0_IRQHandler(void)
     uint8 byFlag = 0;             // 同步信号发送结果标识符
     uint8 byRtcTimeValidFlag = 0; // rtc时间有效标识符
 
-    if (EXTI_GetITStatus(EXTI_Line0) != RESET)
+    if (EXTI_GetITStatus(EXTI_BD_LINE) != RESET)
+    {
+        // 延时,以便判断脉宽是否符合要求
+        byIntLevelFlag = GPIO_ReadInputDataBit(EXTI_BD_GPIO_PORT, EXTI_BD_GPIO_PIN); // 查询中断脉冲电平值
+        if (byIntLevelFlag)
+        { // 中断有效
+            gExti_bySyncSendCounter++;
+            if (gExti_bySyncSendCounter == EXTI_SYNC_SEND_COUNTER)
+            {
+                gExti_bySyncSendCounter = 0;
+
+                // 查询发送标识符,0:空闲可发送;1:发送进行中;2:发送已完成
+                byTxCpltFlag = sync_rxtx_query_tx_cplt_flag();
+
+                // 模块空闲,可发送
+                if (!byTxCpltFlag)
+                {
+                    // 同步定时有效,发送同步信号,否则不发送同步信号
+                    if (gExti_bySyncTimerEnabled)
+                    {
+                        // 修改发送标识符,发送进行中
+                        sync_rxtx_update_tx_cplt_flag(1);
+
+                        // 发送同步信号
+                        byFlag = sync_rxtx_send_signal();
+                        if (byFlag) // 发送成功
+                        {
+                            exti_enable_sync_tx_int(); // 使能同步信号发送中断
+                        }
+                        // 发送失败
+                        else
+                        {
+                            sync_rxtx_update_tx_alarm(1);     // 产生发送告警
+                            sync_rxtx_update_tx_cplt_flag(2); // 修改发送标识符,发送完成
+                        }
+                    }
+                }
+            }
+
+            // 同步定时无效,不发送同步信号,指示灯每秒闪烁一次
+            if (!gExti_bySyncTimerEnabled)
+            {
+                // 亮灯
+                gExti_byLedFlag ^= 1; // 异或操作
+                driver_led_switch_green(gExti_byLedFlag);
+            }
+        }
+
+        // 清除中断标识符
+        EXTI_ClearITPendingBit(EXTI_BD_LINE);
+    }
+
+    return;
+}
+
+// 初始化外部中断(cpld的PPS信号)
+void exti_init_pps_cpld()
+{
+    GPIO_InitTypeDef stGpio = {0};
+    EXTI_InitTypeDef stExti = {0};
+    NVIC_InitTypeDef stNvic = {0};
+
+    // 使能SYSCOFG时钟
+    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
+
+    // 初始化GPIO管脚
+    RCC_AHB1PeriphClockCmd(EXTI_CPLD_RCC_PERIPH, ENABLE);
+    stGpio.GPIO_Mode = GPIO_Mode_IN;   // 管脚模式,输入模式
+    stGpio.GPIO_PuPd = GPIO_PuPd_DOWN; // 下拉,平时保持低电平
+    stGpio.GPIO_Speed = GPIO_Speed_50MHz;
+    stGpio.GPIO_Pin = EXTI_CPLD_GPIO_PIN;
+    GPIO_Init(EXTI_CPLD_GPIO_PORT, &stGpio);
+
+    // 配置GPIO管脚与exti线间的映射关系
+    SYSCFG_EXTILineConfig(EXTI_CPLD_SOURCE_PORT, EXTI_CPLD_SOURCE_PIN);
+
+    // 配置外部中断参数
+    stExti.EXTI_Line = EXTI_CPLD_LINE;
+    stExti.EXTI_Mode = EXTI_Mode_Interrupt;
+    stExti.EXTI_Trigger = EXTI_Trigger_Rising;
+    stExti.EXTI_LineCmd = ENABLE;
+    EXTI_DeInit();
+    EXTI_Init(&stExti);
+
+    // 配置中断
+    stNvic.NVIC_IRQChannel = EXTI_CPLD_IRQ_CHANNEL;
+    stNvic.NVIC_IRQChannelPreemptionPriority = 0;
+    stNvic.NVIC_IRQChannelSubPriority = 0;
+    stNvic.NVIC_IRQChannelCmd = ENABLE;
+    NVIC_Init(&stNvic);
+}
+
+// EXTI1中断服务程序(收到CPLD的PPS信号)
+void EXTI1_IRQHandler(void)
+{
+    uint8 byIntLevelFlag = 0;     // 中断脉冲电平值
+    uint8 byTxCpltFlag = 0;       // 同步信号发送完成标识符
+    uint8 byFlag = 0;             // 同步信号发送结果标识符
+    uint8 byRtcTimeValidFlag = 0; // rtc时间有效标识符
+
+    if (EXTI_GetITStatus(EXTI_CPLD_LINE) != RESET)
     {
         // 延时,以便判断脉宽是否符合要求
-        byIntLevelFlag = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0); // 查询中断脉冲电平值
+        byIntLevelFlag = GPIO_ReadInputDataBit(EXTI_CPLD_GPIO_PORT, EXTI_CPLD_GPIO_PIN); // 查询中断脉冲电平值
         if (byIntLevelFlag)
         { // 中断有效
             gExti_bySyncSendCounter++;
@@ -118,7 +219,7 @@ void EXTI0_IRQHandler(void)
         }
 
         // 清除中断标识符
-        EXTI_ClearITPendingBit(EXTI_Line0);
+        EXTI_ClearITPendingBit(EXTI_CPLD_LINE);
     }
 
     return;
@@ -131,7 +232,7 @@ void exti_set_sync_timer_enabled_flag(uint8 byFlag)
     gExti_bySyncTimerEnabled = byFlag;
 }
 
-/*****************************************上面是处理北斗PPS信号接收******************************************************/
+/*****************************************上面是处理CPLD/北斗PPS信号接收******************************************************/
 /**********************************************************************************************************************/
 /**********************************************************************************************************************/
 /*****************************************下面是处理同步信号发送*********************************************************/
@@ -144,25 +245,25 @@ void exti_init_tx_sync()
     NVIC_InitTypeDef stNvic = {0};
 
     // 初始化GPIO管脚
-    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
+    RCC_AHB1PeriphClockCmd(EXTI_SYNC_RCC_PERIPH, ENABLE);
     stGpio.GPIO_Mode = GPIO_Mode_IN;   // 管脚模式,输入模式
     stGpio.GPIO_PuPd = GPIO_PuPd_DOWN; // 下拉,平时保持低电平
     stGpio.GPIO_Speed = GPIO_Speed_50MHz;
-    stGpio.GPIO_Pin = GPIO_Pin_4;
-    GPIO_Init(GPIOD, &stGpio);
+    stGpio.GPIO_Pin = EXTI_SYNC_GPIO_PIN;
+    GPIO_Init(EXTI_SYNC_GPIO_PORT, &stGpio);
 
     // 配置GPIO管脚与exti线间的映射关系
-    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource4);
+    SYSCFG_EXTILineConfig(EXTI_SYNC_SOURCE_PORT, EXTI_SYNC_SOURCE_PIN);
 
     // 配置外部中断参数
-    stExti.EXTI_Line = EXTI_Line4;
+    stExti.EXTI_Line = EXTI_SYNC_LINE;
     stExti.EXTI_Mode = EXTI_Mode_Interrupt;
     stExti.EXTI_Trigger = EXTI_Trigger_Rising;
     stExti.EXTI_LineCmd = DISABLE;
     EXTI_Init(&stExti);
 
     // 配置中断
-    stNvic.NVIC_IRQChannel = EXTI4_IRQn;
+    stNvic.NVIC_IRQChannel = EXTI_SYNC_IRQ_CHANNEL;
     stNvic.NVIC_IRQChannelPreemptionPriority = 0;
     stNvic.NVIC_IRQChannelSubPriority = 1;
     stNvic.NVIC_IRQChannelCmd = DISABLE;
@@ -172,7 +273,7 @@ void exti_init_tx_sync()
 // EXTI4的中断服务程序(同步信号发送完成外部中断线TX_DONE)
 void EXTI4_IRQHandler(void)
 {
-    if (EXTI_GetITStatus(EXTI_Line4) != RESET)
+    if (EXTI_GetITStatus(EXTI_SYNC_LINE) != RESET)
     {
         // 信号发送已完成
         sync_rxtx_update_tx_cplt_flag(2);
@@ -185,7 +286,7 @@ void EXTI4_IRQHandler(void)
         driver_led_switch_green(gExti_byLedFlag);
 
         // 清除中断标识符
-        EXTI_ClearITPendingBit(EXTI_Line4);
+        EXTI_ClearITPendingBit(EXTI_SYNC_LINE);
     }
 }
 
@@ -196,14 +297,14 @@ void exti_enable_sync_tx_int()
     NVIC_InitTypeDef stNvic = {0};
 
     // 配置外部中断参数
-    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource4); // 配置GPIO管脚与exti线间的映射关系
-    stExti.EXTI_Line = EXTI_Line4;
+    SYSCFG_EXTILineConfig(EXTI_SYNC_SOURCE_PORT, EXTI_SYNC_SOURCE_PIN); // 配置GPIO管脚与exti线间的映射关系
+    stExti.EXTI_Line = EXTI_SYNC_LINE;
     stExti.EXTI_Mode = EXTI_Mode_Interrupt;
     stExti.EXTI_Trigger = EXTI_Trigger_Rising;
     stExti.EXTI_LineCmd = ENABLE;
     EXTI_Init(&stExti);
 
-    stNvic.NVIC_IRQChannel = EXTI4_IRQn;
+    stNvic.NVIC_IRQChannel = EXTI_SYNC_IRQ_CHANNEL;
     stNvic.NVIC_IRQChannelPreemptionPriority = 0;
     stNvic.NVIC_IRQChannelSubPriority = 1;
     stNvic.NVIC_IRQChannelCmd = ENABLE;
@@ -219,13 +320,13 @@ void exti_disable_sync_tx_int()
     NVIC_InitTypeDef stNvic = {0};
 
     // 配置外部中断参数
-    stExti.EXTI_Line = EXTI_Line4;
+    stExti.EXTI_Line = EXTI_SYNC_LINE;
     stExti.EXTI_Mode = EXTI_Mode_Interrupt;
     stExti.EXTI_Trigger = EXTI_Trigger_Rising;
     stExti.EXTI_LineCmd = DISABLE;
     EXTI_Init(&stExti);
 
-    stNvic.NVIC_IRQChannel = EXTI4_IRQn;
+    stNvic.NVIC_IRQChannel = EXTI_SYNC_IRQ_CHANNEL;
     stNvic.NVIC_IRQChannelPreemptionPriority = 0;
     stNvic.NVIC_IRQChannelSubPriority = 1;
     stNvic.NVIC_IRQChannelCmd = DISABLE;

+ 31 - 2
src/exti/exti.h

@@ -8,7 +8,35 @@
 
 #include "sysdef.h"
 
-#define EXTI_SYNC_SEND_COUNTER 3 // 接收到PPS信号的计数器
+// 收到PPS信号次数计数器
+#define EXTI_SYNC_SEND_COUNTER 3
+
+// 北斗模块
+#define EXTI_BD_RCC_PERIPH RCC_AHB1Periph_GPIOB
+#define EXTI_BD_GPIO_PORT GPIOB
+#define EXTI_BD_GPIO_PIN GPIO_Pin_0
+#define EXTI_BD_SOURCE_PORT EXTI_PortSourceGPIOB
+#define EXTI_BD_SOURCE_PIN EXTI_PinSource0
+#define EXTI_BD_LINE EXTI_Line0
+#define EXTI_BD_IRQ_CHANNEL EXTI0_IRQn
+
+// cpld模块
+#define EXTI_CPLD_RCC_PERIPH RCC_AHB1Periph_GPIOA
+#define EXTI_CPLD_GPIO_PORT GPIOA
+#define EXTI_CPLD_GPIO_PIN GPIO_Pin_1
+#define EXTI_CPLD_SOURCE_PORT EXTI_PortSourceGPIOA
+#define EXTI_CPLD_SOURCE_PIN EXTI_PinSource1
+#define EXTI_CPLD_LINE EXTI_Line1
+#define EXTI_CPLD_IRQ_CHANNEL EXTI1_IRQn
+
+// 同步信号模块
+#define EXTI_SYNC_RCC_PERIPH RCC_AHB1Periph_GPIOD
+#define EXTI_SYNC_GPIO_PORT GPIOD
+#define EXTI_SYNC_GPIO_PIN GPIO_Pin_4
+#define EXTI_SYNC_SOURCE_PORT EXTI_PortSourceGPIOD
+#define EXTI_SYNC_SOURCE_PIN EXTI_PinSource4
+#define EXTI_SYNC_LINE EXTI_Line4
+#define EXTI_SYNC_IRQ_CHANNEL EXTI4_IRQn
 
 // 供外部使用接口
 void exti_init();
@@ -17,7 +45,8 @@ void exti_disable_sync_tx_int();
 void exti_set_sync_timer_enabled_flag(uint8 byFlag);
 
 // 内部接口
-void exti_init_rx_pps1();
+void exti_init_pps_bd();
+void exti_init_pps_cpld();
 void exti_init_tx_sync();
 
 #endif

+ 3 - 0
src/main.c

@@ -59,6 +59,9 @@ uint8 main_driver_init()
 {
     uint8 byFlag = 0;
 
+    // 初始化用户时钟
+    sysrcc_config_user_clk();
+
     // 初始化延时定时器
     driver_delay_init();
 

+ 21 - 4
src/monitor/monitor.c

@@ -29,7 +29,7 @@ void monitor_timer_one_minute_expire()
 
     // 查询网管中心使能标识符
     bySwitch = wmm_network_get_omc_switch_flag();
-    if (bySwitch)
+    if (bySwitch) // 使能了网管
     {
         monitor_report_udp_heart();   // 心跳定时上报
         monitor_tcp_connect_status(); // 监测tcp连接状态
@@ -51,6 +51,7 @@ void monitor_timer_one_minute_expire()
 void monitor_report_udp_heart()
 {
     uint8 byUpgradeMode = 0;
+    uint8 byTcpConnectStatus = 0; // tcp连接状态,0:断开,1:连接
 
     gMonitor_stMonitorParam.byUdpHeartCounter++; // 心跳计数器加1
     if (gMonitor_stMonitorParam.byUdpHeartCounter == 3)
@@ -64,8 +65,20 @@ void monitor_report_udp_heart()
             // 上报已正确返回,可继续上报
             if (!gMonitor_stMonitorParam.byUdpReportFlag)
             {
-                gMonitor_stMonitorParam.byUdpReportFlag = 1; // 上报标识符置1
-                oam_report_heart();
+                byTcpConnectStatus = wifible_event_get_tcp_connect_status();
+                if (byTcpConnectStatus)
+                {
+                    gMonitor_stMonitorParam.byUdpReportFlag = 1; // 上报标识符置1
+                    oam_report_heart();
+                }
+                // else
+                // {
+                //     gMonitor_stMonitorParam.byUdpReportFlag = 0;          // 上报状态清零
+                //     gMonitor_stMonitorParam.byUdpReportExpireCounter = 0; // 上报超时计数器清零
+
+                //     nmc_reset_transparent_mode();
+                //     wifi_ble_reset(); // wifi蓝牙模块复位
+                // }
             }
             // 上一次的上报未正确返回
             else
@@ -81,7 +94,11 @@ void monitor_report_udp_heart()
                 }
                 else
                 {
-                    oam_report_heart();
+                    byTcpConnectStatus = wifible_event_get_tcp_connect_status();
+                    if (byTcpConnectStatus)
+                    {
+                        oam_report_heart();
+                    }
                 }
             }
         }

+ 60 - 61
src/sysrcc/sysrcc.c

@@ -8,83 +8,82 @@
 // 配置系统时钟,包括HSE,PLL
 uint8 sysrcc_config_pll()
 {
-	ErrorStatus errFlag = ERROR;
-
-	RCC_DeInit(); // 反向初始化时钟
-
-	// 配置总线时钟分频因子
-	RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB高速外设总线(122.88MHz)
-	RCC_PCLK2Config(RCC_HCLK_Div2);	 // APB2(高速)(61.44MHz)
-	RCC_PCLK1Config(RCC_HCLK_Div4);	 // APB1(低速)(30.72MHz)
-
-	RCC_HSEConfig(RCC_HSE_ON); // 使能HSE
-	errFlag = RCC_WaitForHSEStartUp();
-	if (errFlag == SUCCESS) // HSE已启动
-	{
-
-		// 配置主PLL(输出122.88MHz)
-		RCC_PLLConfig(RCC_PLLSource_HSE, 8, 160, 2, 4);		// M:8,N:160,P:2,Q:4
-		RCC_PLLCmd(ENABLE);									// 使能主PLl
-		while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) // 等待主PLL稳定
-		{
-		}
-
-		// 配置系统时钟源
-		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // PLL被当成系统时钟源
-		while (RCC_GetSYSCLKSource() != 0x08)	   // 等待时钟源切换
-		{
-		}
-
-		// 配置调压器,均衡性能与功耗
-		// RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);		   // 使能电源接口时钟
-		// PWR_MainRegulatorModeConfig(PWR_Regulator_Voltage_Scale3); // 调压等级3
-
-		// 配置FLASH预取指,指令缓存,数据缓存和等待状态
-		FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_5WS;
-	}
-	else
-	{
-		return 0;
-	}
-
-	return 1;
+    ErrorStatus errFlag = ERROR;
+
+    RCC_DeInit(); // 反向初始化时钟
+
+    // 配置总线时钟分频因子
+    RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB高速外设总线(122.88MHz)
+    RCC_PCLK2Config(RCC_HCLK_Div2);  // APB2(高速)(61.44MHz)
+    RCC_PCLK1Config(RCC_HCLK_Div4);  // APB1(低速)(30.72MHz)
+
+    RCC_HSEConfig(RCC_HSE_ON); // 使能HSE
+    errFlag = RCC_WaitForHSEStartUp();
+    if (errFlag == SUCCESS) // HSE已启动
+    {
+
+        // 配置主PLL(输出122.88MHz)
+        RCC_PLLConfig(RCC_PLLSource_HSE, 8, 160, 2, 4);     // M:8,N:160,P:2,Q:4
+        RCC_PLLCmd(ENABLE);                                 // 使能主PLl
+        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) // 等待主PLL稳定
+        {
+        }
+
+        // 配置系统时钟源
+        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // PLL被当成系统时钟源
+        while (RCC_GetSYSCLKSource() != 0x08)      // 等待时钟源切换
+        {
+        }
+
+        // 配置调压器,均衡性能与功耗
+        // RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);		   // 使能电源接口时钟
+        // PWR_MainRegulatorModeConfig(PWR_Regulator_Voltage_Scale3); // 调压等级3
+
+        // 配置FLASH预取指,指令缓存,数据缓存和等待状态
+        FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_5WS;
+    }
+    else
+    {
+        return 0;
+    }
+
+    return 1;
 }
 
 // 配置输出时钟(MCO2),给CPLD使用
 void sysrcc_config_mco2()
 {
-	GPIO_InitTypeDef stGpio = {0};
-
-	//初始化MCO2
-	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
-	GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_MCO);
-
-	stGpio.GPIO_Mode = GPIO_Mode_AF;
-	stGpio.GPIO_OType = GPIO_OType_PP;
-	stGpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
-	stGpio.GPIO_Speed = GPIO_Speed_50MHz;
-	stGpio.GPIO_Pin = GPIO_Pin_9;
-	GPIO_Init(GPIOC, &stGpio);
+    GPIO_InitTypeDef stGpio = {0};
+
+    // 初始化MCO2
+    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
+    GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_MCO);
+
+    stGpio.GPIO_Mode = GPIO_Mode_AF;
+    stGpio.GPIO_OType = GPIO_OType_PP;
+    stGpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
+    stGpio.GPIO_Speed = GPIO_Speed_50MHz;
+    stGpio.GPIO_Pin = GPIO_Pin_9;
+    GPIO_Init(GPIOC, &stGpio);
 }
 
 // 配置I2SPLL(输出61.44MHz时钟到I2S接口)
 void sysrcc_config_i2spll()
 {
-	// 配置PLLI2S分频因子 n:400,q:4(SAI),r:2(I2S)
-	RCC_PLLI2SConfig(160, 4, 4); // 输出时钟到i2s接口
+    // 配置PLLI2S分频因子 n:400,q:4(SAI),r:2(I2S)
+    RCC_PLLI2SConfig(160, 4, 4); // 输出时钟到i2s接口
 
-	RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S); // 配置I2S时钟源
+    RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S); // 配置I2S时钟源
 
-	RCC_PLLI2SCmd(ENABLE); // 使能时钟
+    RCC_PLLI2SCmd(ENABLE); // 使能时钟
 }
 
 // 配置用户时钟
-//配置输出时钟和I2S接口时钟
 void sysrcc_config_user_clk()
 {
-	// 配置输出时钟
-	sysrcc_config_mco2();
+    // 配置MCO2输出
+    sysrcc_config_mco2();
 
-	// 配置I2SPLL
-	sysrcc_config_i2spll();
+    // 配置I2SPLL
+    sysrcc_config_i2spll();
 }

+ 1 - 1
src/wifible/wifi_cmd.c

@@ -70,7 +70,7 @@ void wifi_cmd_check_ap_connect_status()
 void wifi_cmd_create_socket(char *pbyIp, uint16 wPort)
 {
     int8 abyAtValue[AT_WIFIBLE_CMD_VALUE_LEN] = {0};
-    sprintf(abyAtValue, "%s%d,%s,%d%s", "=", 4, pbyIp, wPort, "\r\n"); // 拼接字符串
+    sprintf(abyAtValue, "%s%d,%s,%d,%d%s", "=", 4, pbyIp, wPort, 90, "\r\n"); // 拼接字符串
 
     wifi_ble_send_at_cmd(AT_WIFI_SOCKET, abyAtValue, 2);
 

+ 1 - 1
src/wifible/wifible.h

@@ -19,7 +19,7 @@
 #define AT_WIFIBLE_GMR "AT+GMR"             // 查询版本信息
 
 // 消息重发次数
-#define AT_WIFI_BLE_SEND_MAX_TIMES 3
+#define AT_WIFI_BLE_SEND_MAX_TIMES 5
 
 // 模块管理结构
 typedef struct

+ 24 - 12
src/wifible/wifible_expire.c

@@ -13,8 +13,8 @@ extern WIFI_PARAM_T gWifi_stParam;
 void ble_expire_main(uint8 *pbyData)
 {
     void (*pFuncPtrVoid)() = NULL;
-    void (*pFuncPtrOneInt)(int) = NULL;
-    void (*pFuncPtrOneChar)(char *) = NULL;
+    // void (*pFuncPtrOneInt)(int) = NULL;
+    // void (*pFuncPtrOneChar)(char *) = NULL;
     void (*pFuncPtrTwoChar)(char *, char *) = NULL;
     void (*pFuncPtrTwoParam)(char *, uint16) = NULL;
 
@@ -22,13 +22,13 @@ void ble_expire_main(uint8 *pbyData)
 
     timer_stop_timer(gWifiBle_stParam.byTimerID); // 关闭定时器
     gWifiBle_stParam.byMutex = 0;                 // 发送解锁
-    gWifiBle_stParam.byInit = 0;                  // 模块进入初始化
+    // gWifiBle_stParam.byInit = 0;                  // 模块进入初始化
 
     // 退出透传模式命令超时
     if (NULL != strstr(AT_WIFI_EXIT_TT, (char *)gWifiBle_stParam.abyAtCmd))
     {
         pFuncPtrVoid = wifi_cmd_exit_socket_transparent;
-        ble_expire_resend_at_no_param(pFuncPtrVoid, 1);
+        ble_expire_resend_at_no_param(pFuncPtrVoid, 0);
     }
     // 关闭回显命令超时
     else if (NULL != strstr(AT_WIFIBLE_ATE0, (char *)gWifiBle_stParam.abyAtCmd))
@@ -94,6 +94,7 @@ void ble_expire_resend_at_no_param(void (*pFuncPtr)(), uint8 byRstFlag)
     {
         gWifiBle_stParam.byTimes = 0; // 发送次数置0
 
+        // 重启模块
         if (byRstFlag)
         {
             // wifi模块重启
@@ -112,16 +113,22 @@ void ble_expire_resend_at_no_param(void (*pFuncPtr)(), uint8 byRstFlag)
 }
 
 // 超时重发函数,一个整数参数
-void ble_expire_resend_at_one_int_param(void (*pFuncPtr)(int), int dwData)
+// byRstFlag:模块重启标识符,0:不重启,1:重启
+void ble_expire_resend_at_one_int_param(void (*pFuncPtr)(int), int dwData, uint8 byRstFlag)
 {
     memset(gWifiBle_stParam.abyAtCmd, 0, AT_WIFIBLE_CMD_LEN);
 
     // 已经超过最大次数
     if (gWifiBle_stParam.byTimes >= AT_WIFI_BLE_SEND_MAX_TIMES)
     {
-        gWifiBle_stParam.byTimes = 0;                                                                 // 发送次数置0
-        driver_wifi_reset();                                                                          // wifi模块重启
-        timer_start_timer(gWifiBle_stParam.byTimerID, 1000 * 10, (void *)ble_cmd_module_init_config); // 10秒后重新配置
+        gWifiBle_stParam.byTimes = 0; // 发送次数置0
+
+        // 重启模块
+        if (byRstFlag)
+        {
+            driver_wifi_reset();                                                                          // wifi模块重启
+            timer_start_timer(gWifiBle_stParam.byTimerID, 1000 * 10, (void *)ble_cmd_module_init_config); // 10秒后重新配置
+        }
     }
     else
     {
@@ -133,16 +140,21 @@ void ble_expire_resend_at_one_int_param(void (*pFuncPtr)(int), int dwData)
 }
 
 // 超时重发函数,一个字符参数
-void ble_expire_resend_at_one_char_param(void (*pFuncPtr)(char *), char *pbyData)
+void ble_expire_resend_at_one_char_param(void (*pFuncPtr)(char *), char *pbyData, uint8 byRstFlag)
 {
     memset(gWifiBle_stParam.abyAtCmd, 0, AT_WIFIBLE_CMD_LEN);
 
     // 已经超过最大次数
     if (gWifiBle_stParam.byTimes >= AT_WIFI_BLE_SEND_MAX_TIMES)
     {
-        gWifiBle_stParam.byTimes = 0;                                                                 // 发送次数置0
-        driver_wifi_reset();                                                                          // wifi模块重启
-        timer_start_timer(gWifiBle_stParam.byTimerID, 1000 * 10, (void *)ble_cmd_module_init_config); // 10秒后重新配置
+        gWifiBle_stParam.byTimes = 0; // 发送次数置0
+
+        // 重启模块
+        if (byRstFlag)
+        {
+            driver_wifi_reset();                                                                          // wifi模块重启
+            timer_start_timer(gWifiBle_stParam.byTimerID, 1000 * 10, (void *)ble_cmd_module_init_config); // 10秒后重新配置
+        }
     }
     else
     {

+ 2 - 2
src/wifible/wifible_expire.h

@@ -14,8 +14,8 @@ void ble_expire_main(uint8 *pbyData);
 // 内部使用接口
 void ble_expire_no_param();
 void ble_expire_resend_at_no_param(void (*pFuncPtr)(), uint8 byRstFlag);
-void ble_expire_resend_at_one_int_param(void (*pFuncPtr)(int), int dwData);
-void ble_expire_resend_at_one_char_param(void (*pFuncPtr)(char *), char *pbyData);
+void ble_expire_resend_at_one_int_param(void (*pFuncPtr)(int), int dwData, uint8 byRstFlag);
+void ble_expire_resend_at_one_char_param(void (*pFuncPtr)(char *), char *pbyData, uint8 byRstFlag);
 void ble_expire_resend_at_two_char_param(void (*pFuncPtr)(char *, char *), char *pbyData1, char *pbyData2, uint8 byRstFlag);
 void ble_expire_resend_at_two_param(void (*pFuncPtr)(char *, uint16), char *pbyData, uint16 wParam, uint8 byRstFlag);
 #endif

+ 35 - 26
src/wifible/wifible_resp.c

@@ -10,6 +10,9 @@ extern WIFI_BLE_PARAM_T gWifiBle_stParam;
 extern WIFI_PARAM_T gWifi_stParam;  // wifi模块参数
 extern uint32 gWifi_dwSocketConnId; // socket连接ID
 
+// 定义本模块使用的全局变量
+static uint8 gWifiResp_byCheckSocketTimes = 0; // 检查socket链接状态次数
+
 // AT命令响应成功
 // pbyData:响应数据
 void ble_resp_ok(uint8 *pbyData)
@@ -97,36 +100,42 @@ void ble_resp_ok(uint8 *pbyData)
         else if (NULL != strstr(AT_WIFI_SOCKET, (char *)gWifiBle_stParam.abyAtCmd))
         {
             wifi_ble_reset_module_status(); // 更新模块状态
+            // gWifiBle_stParam.bySocketConnected = 1;
 
             // 检查socket连接状态
-            // wifi_cmd_check_socket_connect_status();
+            wifi_cmd_check_socket_connect_status();
+
+            // // socket进入透传模式
+            // wifi_cmd_socket_transparent();
+        }
+        // socket连接成功
+        else if (NULL != strstr(AT_WIFI_SOCKET_CHECK, (char *)gWifiBle_stParam.abyAtCmd))
+        {
+            wifi_ble_reset_module_status(); // 更新模块状态
+
+            // 解析响应字符串,获得socket连接状态
+            uint8 abyStatus[2] = {0};
+            uint8 byStatus = 0;
+            ble_resp_parse_str_by_split_flag(pbyData, SYS_STRLEN((char *)pbyData), 0x2C, 2, 1, abyStatus);
+            byStatus = abyStatus[0] - 48; // 将ascii转成数字
 
-            // socket进入透传模式
-            wifi_cmd_socket_transparent();
+            // socket连接成功
+            if (byStatus == 3)
+            {
+                gWifiResp_byCheckSocketTimes = 0;       // 检查次数归0
+                gWifiBle_stParam.bySocketConnected = 1; // socket链接成功
+                wifi_cmd_socket_transparent();          // socket进入透传模式,在透传模式之下不能使用at命令
+            }
+            else
+            {
+                gWifiResp_byCheckSocketTimes++;
+                if (gWifiResp_byCheckSocketTimes < 10)
+                {
+                    // 继续查询socket连接状态
+                    timer_start_timer(gWifiBle_stParam.byTimerID, 1000 * 3, (void *)wifi_cmd_check_socket_connect_status);
+                }
+            }
         }
-        // // socket连接成功
-        // else if (NULL != strstr(AT_WIFI_SOCKET_CHECK, (char *)gWifiBle_stParam.abyAtCmd))
-        // {
-        //     wifi_ble_reset_module_status(); // 更新模块状态
-
-        //     // 解析响应字符串,获得socket连接状态
-        //     uint8 abyStatus[2] = {0};
-        //     uint8 byStatus = 0;
-        //     ble_resp_parse_str_by_split_flag(pbyData, SYS_STRLEN((char *)pbyData), 0x2C, 2, 1, abyStatus);
-        //     byStatus = (uint8)atoi(abyStatus[0]);
-
-        //     // socket连接成功
-        //     if (byStatus == 3)
-        //     {
-        //         // socket进入透传模式
-        //         wifi_cmd_socket_transparent();
-        //     }
-        //     else
-        //     {
-        //         // 继续查询socket连接状态
-        //         timer_start_timer(gWifiBle_stParam.byTimerID, 1000 * 3, (void *)wifi_cmd_check_socket_connect_status);
-        //     }
-        // }
         // socket进入透传模式成功
         else if (NULL != strstr(AT_WIFI_SOCKETTT, (char *)gWifiBle_stParam.abyAtCmd))
         {

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio