Преглед изворни кода

Polling 방식 to DMA Usart 방식으로 변경 (변경 이유)

IT 와 Polling 을 동시에 같이쓰면 가끔씩 CPU가 뻗음
YJ пре 6 година
родитељ
комит
d1a005ddfc
27 измењених фајлова са 4314 додато и 4054 уклоњено
  1. 2 0
      .settings/org.eclipse.core.resources.prefs
  2. BIN
      Debug/STM32F103_ATTEN_PLL_Zig.elf
  3. 517 502
      Debug/STM32F103_ATTEN_PLL_Zig.hex
  4. 3290 3104
      Debug/STM32F103_ATTEN_PLL_Zig.list
  5. 421 415
      Debug/STM32F103_ATTEN_PLL_Zig.map
  6. 5 5
      Debug/Src/main.su
  7. BIN
      Debug/Src/stm32f1xx_hal_msp.o
  8. 5 5
      Debug/Src/stm32f1xx_hal_msp.su
  9. BIN
      Debug/Src/stm32f1xx_it.o
  10. 13 12
      Debug/Src/stm32f1xx_it.su
  11. 1 0
      Inc/stm32f1xx_it.h
  12. 12 1
      STM32F103_ATTEN_PLL_Zig.ioc
  13. 9 9
      Src/flash.c
  14. 4 0
      Src/main.c
  15. 19 0
      Src/stm32f1xx_hal_msp.c
  16. 15 0
      Src/stm32f1xx_it.c
  17. 1 1
      Src/uart.c
  18. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_sym
  19. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xab
  20. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xad
  21. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xc
  22. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xf
  23. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xm
  24. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xr
  25. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xsb
  26. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xsd
  27. BIN
      insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.siproj

+ 2 - 0
.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,2 @@
1
+eclipse.preferences.version=1
2
+encoding//Src/flash.c=UTF-8

BIN
Debug/STM32F103_ATTEN_PLL_Zig.elf


Разлика између датотеке није приказан због своје велике величине
+ 517 - 502
Debug/STM32F103_ATTEN_PLL_Zig.hex


Разлика између датотеке није приказан због своје велике величине
+ 3290 - 3104
Debug/STM32F103_ATTEN_PLL_Zig.list


Разлика између датотеке није приказан због своје велике величине
+ 421 - 415
Debug/STM32F103_ATTEN_PLL_Zig.map


+ 5 - 5
Debug/Src/main.su

@@ -1,5 +1,5 @@
1
-main.c:70:6:HAL_TIM_PeriodElapsedCallback	0	static
2
-main.c:79:5:_write	8	static
3
-main.c:152:6:SystemClock_Config	72	static
4
-main.c:91:5:main	40	static
5
-main.c:325:6:Error_Handler	0	static
1
+main.c:71:6:HAL_TIM_PeriodElapsedCallback	0	static
2
+main.c:80:5:_write	8	static
3
+main.c:153:6:SystemClock_Config	72	static
4
+main.c:92:5:main	40	static
5
+main.c:329:6:Error_Handler	0	static

BIN
Debug/Src/stm32f1xx_hal_msp.o


+ 5 - 5
Debug/Src/stm32f1xx_hal_msp.su

@@ -1,5 +1,5 @@
1
-stm32f1xx_hal_msp.c:65:6:HAL_MspInit	8	static
2
-stm32f1xx_hal_msp.c:91:6:HAL_TIM_Base_MspInit	8	static
3
-stm32f1xx_hal_msp.c:113:6:HAL_TIM_Base_MspDeInit	0	static
4
-stm32f1xx_hal_msp.c:138:6:HAL_UART_MspInit	40	static
5
-stm32f1xx_hal_msp.c:194:6:HAL_UART_MspDeInit	8	static
1
+stm32f1xx_hal_msp.c:67:6:HAL_MspInit	8	static
2
+stm32f1xx_hal_msp.c:93:6:HAL_TIM_Base_MspInit	8	static
3
+stm32f1xx_hal_msp.c:115:6:HAL_TIM_Base_MspDeInit	0	static
4
+stm32f1xx_hal_msp.c:140:6:HAL_UART_MspInit	40	static
5
+stm32f1xx_hal_msp.c:212:6:HAL_UART_MspDeInit	8	static

BIN
Debug/Src/stm32f1xx_it.o


+ 13 - 12
Debug/Src/stm32f1xx_it.su

@@ -1,12 +1,13 @@
1
-stm32f1xx_it.c:72:6:NMI_Handler	0	static
2
-stm32f1xx_it.c:85:6:HardFault_Handler	0	static
3
-stm32f1xx_it.c:100:6:MemManage_Handler	0	static
4
-stm32f1xx_it.c:115:6:BusFault_Handler	0	static
5
-stm32f1xx_it.c:130:6:UsageFault_Handler	0	static
6
-stm32f1xx_it.c:145:6:SVC_Handler	0	static
7
-stm32f1xx_it.c:158:6:DebugMon_Handler	0	static
8
-stm32f1xx_it.c:171:6:PendSV_Handler	0	static
9
-stm32f1xx_it.c:184:6:SysTick_Handler	0	static
10
-stm32f1xx_it.c:205:6:DMA1_Channel5_IRQHandler	0	static
11
-stm32f1xx_it.c:219:6:USART1_IRQHandler	0	static
12
-stm32f1xx_it.c:233:6:TIM6_IRQHandler	0	static
1
+stm32f1xx_it.c:73:6:NMI_Handler	0	static
2
+stm32f1xx_it.c:86:6:HardFault_Handler	0	static
3
+stm32f1xx_it.c:101:6:MemManage_Handler	0	static
4
+stm32f1xx_it.c:116:6:BusFault_Handler	0	static
5
+stm32f1xx_it.c:131:6:UsageFault_Handler	0	static
6
+stm32f1xx_it.c:146:6:SVC_Handler	0	static
7
+stm32f1xx_it.c:159:6:DebugMon_Handler	0	static
8
+stm32f1xx_it.c:172:6:PendSV_Handler	0	static
9
+stm32f1xx_it.c:185:6:SysTick_Handler	0	static
10
+stm32f1xx_it.c:206:6:DMA1_Channel4_IRQHandler	0	static
11
+stm32f1xx_it.c:220:6:DMA1_Channel5_IRQHandler	0	static
12
+stm32f1xx_it.c:234:6:USART1_IRQHandler	0	static
13
+stm32f1xx_it.c:248:6:TIM6_IRQHandler	0	static

+ 1 - 0
Inc/stm32f1xx_it.h

@@ -56,6 +56,7 @@ void SVC_Handler(void);
56 56
 void DebugMon_Handler(void);
57 57
 void PendSV_Handler(void);
58 58
 void SysTick_Handler(void);
59
+void DMA1_Channel4_IRQHandler(void);
59 60
 void DMA1_Channel5_IRQHandler(void);
60 61
 void USART1_IRQHandler(void);
61 62
 void TIM6_IRQHandler(void);

+ 12 - 1
STM32F103_ATTEN_PLL_Zig.ioc

@@ -1,6 +1,7 @@
1 1
 #MicroXplorer Configuration settings - do not modify
2 2
 Dma.Request0=USART1_RX
3
-Dma.RequestsNb=1
3
+Dma.Request1=USART1_TX
4
+Dma.RequestsNb=2
4 5
 Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
5 6
 Dma.USART1_RX.0.Instance=DMA1_Channel5
6 7
 Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
@@ -10,6 +11,15 @@ Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
10 11
 Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE
11 12
 Dma.USART1_RX.0.Priority=DMA_PRIORITY_LOW
12 13
 Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
14
+Dma.USART1_TX.1.Direction=DMA_MEMORY_TO_PERIPH
15
+Dma.USART1_TX.1.Instance=DMA1_Channel4
16
+Dma.USART1_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
17
+Dma.USART1_TX.1.MemInc=DMA_MINC_ENABLE
18
+Dma.USART1_TX.1.Mode=DMA_NORMAL
19
+Dma.USART1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
20
+Dma.USART1_TX.1.PeriphInc=DMA_PINC_DISABLE
21
+Dma.USART1_TX.1.Priority=DMA_PRIORITY_LOW
22
+Dma.USART1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
13 23
 File.Version=6
14 24
 KeepUserPlacement=false
15 25
 Mcu.Family=STM32F1
@@ -36,6 +46,7 @@ Mcu.UserName=STM32F103ZETx
36 46
 MxCube.Version=5.2.1
37 47
 MxDb.Version=DB.5.0.21
38 48
 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
49
+NVIC.DMA1_Channel4_IRQn=true\:0\:0\:false\:true\:true\:4\:false\:true
39 50
 NVIC.DMA1_Channel5_IRQn=true\:0\:0\:false\:true\:true\:1\:false\:true
40 51
 NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false
41 52
 NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false

+ 9 - 9
Src/flash.c

@@ -12,8 +12,8 @@ typedef void (*fptr)(void);
12 12
 fptr jump_to_app;
13 13
 uint32_t jump_addr;
14 14
 void Jump_App(void){
15
-    __HAL_RCC_TIM6_CLK_DISABLE(); // 매인???��머�?? ?���??��?��?��
16
-    printf("boot loader start\n");               //메세�? 출력
15
+    __HAL_RCC_TIM6_CLK_DISABLE(); // 留ㅼ씤???占쏙옙癒몌옙?? ?占쏙옙占�??占쏙옙?占쏙옙?占쏙옙
16
+    printf("boot loader start\n");               //硫붿꽭占�? 異쒕젰
17 17
     jump_addr = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
18 18
     jump_to_app = (fptr) jump_addr;
19 19
     
@@ -35,7 +35,7 @@ void FLASH_If_Init(void)
35 35
   HAL_FLASH_Lock();
36 36
 }
37 37
 
38
-void Flash_InitRead(void) // ?��기함?��
38
+void Flash_InitRead(void) // ?占쏙옙湲고븿?占쏙옙
39 39
 {
40 40
     uint32_t  Address = 0;
41 41
     Address = FLASH_USER_START_ADDR;
@@ -68,13 +68,13 @@ uint8_t Flash_RGB_Data_Write(uint8_t* data){
68 68
             ret = 1;
69 69
         }
70 70
         Address += 2;
71
-        if(!(i%FirmwareUpdateDelay))
71
+        //if(!(i%FirmwareUpdateDelay))
72 72
         HAL_Delay(1);
73 73
     }
74 74
     return ret;
75 75
 }
76 76
 
77
-uint8_t Flash_write(uint8_t* data) // ?��기함?��
77
+uint8_t Flash_write(uint8_t* data) // ?占쏙옙湲고븿?占쏙옙
78 78
 {
79 79
 
80 80
     /*Variable used for Erase procedure*/
@@ -86,8 +86,8 @@ uint8_t Flash_write(uint8_t* data) // ?��기함?��
86 86
     EraseInitStruct.PageAddress = FLASH_USER_START_ADDR;
87 87
     EraseInitStruct.NbPages     = (FLASH_USER_END_ADDR - FLASH_USER_START_ADDR) / FLASH_PAGE_SIZE;
88 88
 
89
-    __HAL_RCC_TIM6_CLK_DISABLE(); // 매인???��머�?? ?���??��?��?��
90
-    HAL_FLASH_Unlock(); // lock ??�?
89
+    __HAL_RCC_TIM6_CLK_DISABLE(); // 留ㅼ씤???占쏙옙癒몌옙?? ?占쏙옙占�??占쏙옙?占쏙옙?占쏙옙
90
+    HAL_FLASH_Unlock(); // lock ??�?
91 91
     if(flashinit == 0){
92 92
         flashinit= 1;
93 93
         //FLASH_PageErase(StartAddr);
@@ -97,8 +97,8 @@ uint8_t Flash_write(uint8_t* data) // ?��기함?��
97 97
     }
98 98
 //    FLASH_If_Erase();
99 99
     ret = Flash_RGB_Data_Write(&data[bluecell_stx]);
100
-    HAL_FLASH_Lock(); // lock ?��그기
101
-    __HAL_RCC_TIM6_CLK_ENABLE(); // 매인???��머�?? ?��?��?��?��?��?��
100
+    HAL_FLASH_Lock(); // lock ?占쏙옙洹멸린
101
+    __HAL_RCC_TIM6_CLK_ENABLE(); // 留ㅼ씤???占쏙옙癒몌옙?? ?占쏙옙?占쏙옙?占쏙옙?占쏙옙?占쏙옙?占쏙옙
102 102
 
103 103
     return ret;
104 104
 

+ 4 - 0
Src/main.c

@@ -46,6 +46,7 @@ TIM_HandleTypeDef htim6;
46 46
 
47 47
 UART_HandleTypeDef huart1;
48 48
 DMA_HandleTypeDef hdma_usart1_rx;
49
+DMA_HandleTypeDef hdma_usart1_tx;
49 50
 
50 51
 /* USER CODE BEGIN PV */
51 52
 
@@ -196,6 +197,9 @@ static void MX_NVIC_Init(void)
196 197
   /* TIM6_IRQn interrupt configuration */
197 198
   HAL_NVIC_SetPriority(TIM6_IRQn, 0, 0);
198 199
   HAL_NVIC_EnableIRQ(TIM6_IRQn);
200
+  /* DMA1_Channel4_IRQn interrupt configuration */
201
+  HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 0, 0);
202
+  HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);
199 203
 }
200 204
 
201 205
 /**

+ 19 - 0
Src/stm32f1xx_hal_msp.c

@@ -26,6 +26,8 @@
26 26
 /* USER CODE END Includes */
27 27
 extern DMA_HandleTypeDef hdma_usart1_rx;
28 28
 
29
+extern DMA_HandleTypeDef hdma_usart1_tx;
30
+
29 31
 /* Private typedef -----------------------------------------------------------*/
30 32
 /* USER CODE BEGIN TD */
31 33
 
@@ -178,6 +180,22 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
178 180
 
179 181
     __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx);
180 182
 
183
+    /* USART1_TX Init */
184
+    hdma_usart1_tx.Instance = DMA1_Channel4;
185
+    hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
186
+    hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
187
+    hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
188
+    hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
189
+    hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
190
+    hdma_usart1_tx.Init.Mode = DMA_NORMAL;
191
+    hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
192
+    if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
193
+    {
194
+      Error_Handler();
195
+    }
196
+
197
+    __HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx);
198
+
181 199
   /* USER CODE BEGIN USART1_MspInit 1 */
182 200
 
183 201
   /* USER CODE END USART1_MspInit 1 */
@@ -209,6 +227,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
209 227
 
210 228
     /* USART1 DMA DeInit */
211 229
     HAL_DMA_DeInit(huart->hdmarx);
230
+    HAL_DMA_DeInit(huart->hdmatx);
212 231
 
213 232
     /* USART1 interrupt DeInit */
214 233
     HAL_NVIC_DisableIRQ(USART1_IRQn);

+ 15 - 0
Src/stm32f1xx_it.c

@@ -58,6 +58,7 @@
58 58
 /* External variables --------------------------------------------------------*/
59 59
 extern TIM_HandleTypeDef htim6;
60 60
 extern DMA_HandleTypeDef hdma_usart1_rx;
61
+extern DMA_HandleTypeDef hdma_usart1_tx;
61 62
 extern UART_HandleTypeDef huart1;
62 63
 /* USER CODE BEGIN EV */
63 64
 
@@ -199,6 +200,20 @@ void SysTick_Handler(void)
199 200
 /* please refer to the startup file (startup_stm32f1xx.s).                    */
200 201
 /******************************************************************************/
201 202
 
203
+/**
204
+  * @brief This function handles DMA1 channel4 global interrupt.
205
+  */
206
+void DMA1_Channel4_IRQHandler(void)
207
+{
208
+  /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
209
+
210
+  /* USER CODE END DMA1_Channel4_IRQn 0 */
211
+  HAL_DMA_IRQHandler(&hdma_usart1_tx);
212
+  /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */
213
+
214
+  /* USER CODE END DMA1_Channel4_IRQn 1 */
215
+}
216
+
202 217
 /**
203 218
   * @brief This function handles DMA1 channel5 global interrupt.
204 219
   */

+ 1 - 1
Src/uart.c

@@ -67,7 +67,7 @@ void GetDataFromUartQueue(UART_HandleTypeDef *huart)
67 67
     pQueue->data--;
68 68
     
69 69
     if(pQueue->data == 0){
70
-        HAL_UART_Transmit(dst, &temp_buf[BLUECELL_HEADER00], 11, 3000);
70
+        HAL_UART_Transmit_DMA(dst, &temp_buf[BLUECELL_HEADER00], 11);
71 71
 #if 0 // PYJ.2019.07.15_BEGIN -- 
72 72
 //            for(int i = 0; i < cnt; i++){
73 73
 //                printf("%02x",update_data_buf[i]);

BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_sym


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xab


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xad


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xc


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xf


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xm


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xr


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xsb


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.sip_xsd


BIN
insight/STM32F103_ATTEN_PLL_Zig.si4project/STM32F103_ATTEN_PLL_Zig.siproj