Ver código fonte

添加红绿双色指示灯,调整MCU主频到16M

guoqiang 1 ano atrás
pai
commit
283466b609

+ 5 - 2
Device/gpio.c

@@ -87,8 +87,11 @@ void GPIO_PortInit(void)
 		GPIO_SetFunc(RS485CTRL_PORT, RS485CTRL_PIN, GPIO_FUN0);
 		GPIO_SetDir(RS485CTRL_PORT, RS485CTRL_PIN, GPIO_OUT);
 	
-		GPIO_SetFunc(RUNLED_PORT, RUNLED_PIN, GPIO_FUN0);
-		GPIO_SetDir(RUNLED_PORT, RUNLED_PIN, GPIO_OUT);
+		GPIO_SetFunc(GREENLED_PORT, GREENLED_PIN, GPIO_FUN0);
+		GPIO_SetDir(GREENLED_PORT, GREENLED_PIN, GPIO_OUT);
+		
+		GPIO_SetFunc(REDLED_PORT, REDLED_PIN, GPIO_FUN0);
+		GPIO_SetDir(REDLED_PORT, REDLED_PIN, GPIO_OUT);
 	
 	
 }

+ 14 - 7
Device/gpio.h

@@ -56,16 +56,23 @@ extern "C" {
 #define RS485CTRL_PIN  (GPIO_PIN3)
 
 #define RS485_TX_EN				do{GPIO_SetPinLevel(RS485CTRL_PORT, RS485CTRL_PIN, GPIO_LEVEL_HIGH);}while(0)
-#define RS485_RX_EN			do{GPIO_SetPinLevel(RS485CTRL_PORT, RS485CTRL_PIN, GPIO_LEVEL_LOW);}while(0)
+#define RS485_RX_EN				do{GPIO_SetPinLevel(RS485CTRL_PORT, RS485CTRL_PIN, GPIO_LEVEL_LOW);}while(0)
 
-#define RUNLED_PORT			(GPIOA)
-#define RUNLED_PIN			(GPIO_PIN2)
+#define GREENLED_PORT			(GPIOA)
+#define GREENLED_PIN			(GPIO_PIN2)
 
-/*RUNLED¶¯×÷¶¨Òå.*/	
-#define RUNLED_ON				do{GPIO_SetPinLevel(RUNLED_PORT, RUNLED_PIN, GPIO_LEVEL_HIGH);}while(0)
-#define RUNLED_OFF			do{GPIO_SetPinLevel(RUNLED_PORT, RUNLED_PIN, GPIO_LEVEL_LOW);}while(0)
-#define RUNLED_TOGGLE			do{if(GPIO_GetPinLevel(RUNLED_PORT, RUNLED_PIN)){RUNLED_OFF;}else{RUNLED_ON;}}while(0)
+#define REDLED_PORT			(GPIOA)
+#define REDLED_PIN			(GPIO_PIN3)
 
+/*RUNLED¶¯×÷¶¨Òå.*/	
+#define GREENLED_ON				do{GPIO_SetPinLevel(GREENLED_PORT, GREENLED_PIN, GPIO_LEVEL_HIGH);}while(0)
+#define GREENLED_OFF			do{GPIO_SetPinLevel(GREENLED_PORT, GREENLED_PIN, GPIO_LEVEL_LOW);}while(0)
+#define REDLED_ON					do{GPIO_SetPinLevel(REDLED_PORT, REDLED_PIN, GPIO_LEVEL_HIGH);}while(0)
+#define REDLED_OFF				do{GPIO_SetPinLevel(REDLED_PORT, REDLED_PIN, GPIO_LEVEL_LOW);}while(0)
+
+#define GREENLED_TOGGLE		do{if(GPIO_GetPinLevel(GREENLED_PORT, GREENLED_PIN)){GREENLED_OFF;}else{GREENLED_ON;}}while(0)
+#define REDLED_TOGGLE			do{if(GPIO_GetPinLevel(REDLED_PORT, REDLED_PIN)){REDLED_OFF;}else{REDLED_ON;}}while(0)
+#define REDGREEN_TOGGLE		do{if(GPIO_GetPinLevel(REDLED_PORT, REDLED_PIN)){REDLED_OFF;GREENLED_ON;}else{GREENLED_OFF;REDLED_ON;}}while(0)
 
 /*************<enum>*******************/
 

+ 1 - 1
Device/timer.h

@@ -44,7 +44,7 @@ extern "C" {
 #include "ac780x_timer.h"
 
 /*************<macro>******************/
-#define PERH_BUS_CLK		(24000000U)
+#define PERH_BUS_CLK		(8000000U)
 #define TIM_CHN2_PRD_1ms	(PERH_BUS_CLK / 1000 - 1)
 
 

Diferenças do arquivo suprimidas por serem muito extensas
+ 99 - 117
Project/AirControlValve.uvguix.孙凯


+ 1 - 1
Project/AirControlValve.uvoptx

@@ -140,7 +140,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U59518874 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0AC780x_128KB.FLM -FS08000000 -FL020000 -FP0($$Device:AC78013MDQA$Flash\AC780x_128KB.FLM)</Name>
+          <Name>-U59518874 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST1 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0AC780x_128KB.FLM -FS08000000 -FL020000 -FP0($$Device:AC78013MDQA$Flash\AC780x_128KB.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>

+ 2 - 2
Project/AirControlValve.uvprojx

@@ -49,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>AirControlValve_20240401</OutputName>
+          <OutputName>AirControlValve_20240604</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>
@@ -370,7 +370,7 @@
             <TextAddressRange>0x08000000</TextAddressRange>
             <DataAddressRange>0x20000000</DataAddressRange>
             <pXoBase></pXoBase>
-            <ScatterFile></ScatterFile>
+            <ScatterFile>.\Objects\AirControlValve_20240604.sct</ScatterFile>
             <IncludeLibs></IncludeLibs>
             <IncludeLibsPath></IncludeLibsPath>
             <Misc></Misc>

Diferenças do arquivo suprimidas por serem muito extensas
+ 3481 - 1715
Project/JLinkLog.txt


+ 3 - 0
Project/JLinkSettings.ini

@@ -15,6 +15,7 @@ OverrideMemMap = 0
 AllowSimulation = 1
 ScriptFile=""
 [FLASH]
+RMWThreshold = 0x400
 Loaders=""
 EraseType = 0x00
 CacheExcludeSize = 0x00
@@ -41,3 +42,5 @@ WrOverrideAndMask = 0xFFFFFFFF
 WrOverrideAddr = 0xFFFFFFFF
 [RAM]
 VerifyDownload = 0x00
+[DYN_MEM_MAP]
+NumUserRegion = 0x00

+ 5 - 5
Project/RTE/Device/AC78013MDQA/system_ac780x.h

@@ -66,7 +66,7 @@ extern "C" {
 #define IC_CLOCK_SRC_XOSC        2U  /*!< The external OSC to provide 4MHZ ~30MHz  oscillator */
 #define IC_CLOCK_SRC_XOSC_BYPASS 3U  /*!< The external OSC to provide 4MHZ ~30MHz  oscillator */
 
-#define AC780X_CLOCK_SRC  IC_CLOCK_SRC_HSE /*!< define mcu clock source */
+#define AC780X_CLOCK_SRC  IC_CLOCK_SRC_HSI /*!< define mcu clock source */
 
 #define HSI_FREQ      8000000UL   /*!< Internal 8M RC clock */
 #define XTAL_16M     16000000UL   /*!< extern crystal oscillator 16m */
@@ -87,8 +87,8 @@ extern "C" {
 #define PLL_FBKDIV   96U
 #define PLL_PREDIV   PLL_PREDIV_2
 #elif USE_XTAL == XTAL_8M
-#define PLL_POSDIV   PLL_POSDIV_16
-#define PLL_FBKDIV   96U
+#define PLL_POSDIV   PLL_POSDIV_24
+#define PLL_FBKDIV   48U
 #define PLL_PREDIV   PLL_PREDIV_1
 #elif USE_XTAL == XTAL_4M
 #define PLL_POSDIV   PLL_POSDIV_16
@@ -108,8 +108,8 @@ extern "C" {
 */
 #define SYSCLK_DIV   SYSCLK_DIVIDER_1
 #define APBCLK_DIV   APBCLK_DIVIDER_2
-#define SYSCLK_FREQ  48000000UL
-#define APB_BUS_FREQ 24000000UL
+#define SYSCLK_FREQ  16000000UL
+#define APB_BUS_FREQ 8000000UL
 
 #define __SYSTEM_CLOCK    SYSCLK_FREQ
 

+ 54 - 3
User/process.c

@@ -6,16 +6,37 @@ uint16_t	g_blinkLedTime;		/*LED
 uint16_t	g_blinkLedTgtTime;	/*LED目标闪烁频率*/
 uint8_t		g_detectTime;			/*三个开关状态,检测时间*/
 
-#define STATUS_DETECTINTERVAL  (60)  /*60ms * 8 == 500ms  */
+#define STATUS_DETECTINTERVAL  (40)  /*60ms * 8 == 320ms 去抖动 */
 
 uint8_t g_lockstatus;
 uint8_t g_unlockstatus;
 uint8_t g_coverstatus;
 
+uint8_t g_state; //状态
+
 uint8_t lockbits;
 uint8_t unlockbits;
 uint8_t coverbits;
 
+static void update_state()
+{
+	if((STATUS_CLOSE == g_lockstatus) & (STATUS_OPEN == g_unlockstatus)){
+		g_state = STATE_LOCK;
+	
+	}else if((STATUS_OPEN == g_lockstatus) & (STATUS_CLOSE == g_unlockstatus)){
+		g_state = STATE_UNLOCK;
+	}else if((STATUS_OPEN == g_lockstatus) & (STATUS_OPEN == g_unlockstatus)){
+		g_state = STATE_INTERMEDIATE;
+	}else {
+		g_state = STATE_EXCEPTION;
+	}
+	
+	//if(STATUS_OPEN == g_coverstatus){
+	//	g_state = STATE_OPENCOVER;
+	//}
+
+}
+
 void Process_Init(void)
 {
 		/*初始化控制变量.*/
@@ -33,7 +54,9 @@ void Process_Init(void)
 		coverbits = g_coverstatus == STATUS_OPEN?0xFF:0x00;
 	
 		/*上电默认LED点亮.*/
-		RUNLED_ON;
+
+		//GREENLED_ON;
+		update_state();
 }
 
 void Process_RunLedPrd(void)
@@ -43,7 +66,33 @@ void Process_RunLedPrd(void)
 	{
 		g_blinkLedTime = 0;
 		
-		RUNLED_TOGGLE;
+		//REDLED_OFF;
+		//REDGREEN_TOGGLE;
+		
+		switch(g_state){
+			case STATE_LOCK:
+				REDLED_OFF;
+				GREENLED_TOGGLE;
+				break;
+			case STATE_UNLOCK:
+				GREENLED_OFF;
+				REDLED_TOGGLE;
+				break;
+			case STATE_INTERMEDIATE:
+				REDGREEN_TOGGLE;
+				break;
+			case STATE_OPENCOVER:
+				REDLED_OFF;
+			  GREENLED_ON;
+				break;
+			case STATE_EXCEPTION:
+			default:
+				GREENLED_OFF;
+			  REDLED_ON;
+				break;
+		
+		};
+		
 	}
 	
 }
@@ -91,6 +140,8 @@ void Process_ThreeStatus(void)
 				g_coverstatus = STATUS_CLOSE;
 		}
 		
+		update_state();
+		
 	
 	}
 	

+ 7 - 1
User/process.h

@@ -49,11 +49,17 @@ extern uint8_t		g_detectTime;
 
 #define BLINK_LED_MINT		(100)	/*闪烁LED灯最小时间间隔*/
 #define BLINK_LED_MAXT		(2000)	/*闪烁LED灯最大时间间隔*/
-#define BLINK_LED_DFTT		(1000)	/*闪烁LED默认时间间隔*/
+#define BLINK_LED_DFTT		(500)	/*闪烁LED默认时间间隔*/
 
 #define STATUS_OPEN  (0x01)
 #define STATUS_CLOSE (0x00)
 
+#define STATE_LOCK     				  (0x00)  /*锁止状态*/
+#define STATE_UNLOCK   					(0x01)	/*开锁状态*/
+#define STATE_INTERMEDIATE      (0x02)	/*中间状态*/
+#define STATE_OPENCOVER         (0x03)	/*开盖状态*/
+#define STATE_EXCEPTION         (0x04)	/*异常状态*/
+
 
 void Process_Init(void);
 void Process_RunLedPrd(void); 

+ 2 - 2
User/protocol.c

@@ -5,9 +5,9 @@
 
 
 #ifdef IS_BOOTLOADER
-uint32_t Firmware_Version[4] = {1, 0, 0, 20240401};
+uint32_t Firmware_Version[4] = {1, 0, 0, 20240618};
 #else
-uint32_t Firmware_Version[4] = {1, 1, 1, 20240401};
+uint32_t Firmware_Version[4] = {1, 1, 1, 20240618};
 #endif