본문 바로가기
임베디드.일렉트로닉스/STM32

STM32. GPIO 속도 향상.

by 리치굿맨 2016. 7. 15.


 

개요.

 

STM32의 GPIO 속도 향상 위한 3가지 조치별 실측.
1. STM32CubeMX에서 GPIO 설정시 속도를 Very High 로 설정.
- GPIO출력함수 HAL_GPIO_WritePin 이용.
2. 상기1의 상태에서 GPIO출력을  레지스터 직접 접근하여 출력.
3. 상기2의 상태에서 컴파일러 옵션에서 시간최적화.
상기 1,2,3 각각에 대해서 외부소자 SPI_CS 제어용으로 STM32의 PB4 를 할당하였고, 출력속도 비교.

결론 : 1대비 2,3  동시 적용시 출력속도 증가 정도는 1대비 최대 5%정도.

시험환경
타겟칩 : STM32L476RET 80MHz 구동.
컴파일러 : KEIL MDK-ARM v5.2
STM32CubeMX STM32L4 라이브러리 버전 : 1.5.2
GPIO 출력핀 : PB4. 용도 : SPI Chip Selection.
SPI 속도 : 20MHz.

 


 


 

1. STM32CubeMX GPIO 설정 Very High Speed.

 



GPIO출력부 코드.


 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET); // 0 출력.
 HAL_SPI_Transmit(pSpiHandle, pBuff, len, HAL_MAX_DELAY);
 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET); // 1출력.

 


 


 

 

2.레지스터 직접 접근 GPIO출력.

 


상기 1의 상태에서 GPIO출력을 레지스터 직접 제어로 한 경우.


GPIO출력부 코드.



 GPIOB->BRR = GPIO_PIN_4 ; // 0출력.
 HAL_SPI_Transmit(pSpiHandle, pBuff, len, HAL_MAX_DELAY);
 GPIOB->BSRR = GPIO_PIN_4 ; // 1 출력.


 


 


 

 

3. 컴파일러 옵션 - Optimize for Time.

 

상기 2의 상태에서 KEIL MDK-ARM 컴파일러 옵션에서 Optimize for Time 적용한 경우.


GPIO출력부 코드.



 GPIOB->BRR = GPIO_PIN_4 ; // 0출력.
 HAL_SPI_Transmit(pSpiHandle, pBuff, len, HAL_MAX_DELAY);
 GPIOB->BSRR = GPIO_PIN_4 ; // 1 출력.


 


 


 


 본 글 포함된 상위 정리장소

 http://igotit.tistory.com/244 


 

///813.

'임베디드.일렉트로닉스 > STM32' 카테고리의 다른 글

STM32L4x6. SPI  (0) 2016.07.15
STM32. SPI 인터럽트 방식.  (0) 2016.07.15
STM32. UART 특성 시험.  (0) 2016.06.28
STM32. CubeMX 다른프로젝트 복사해서 만들기.  (0) 2016.06.28
STM32. USB HID 구현.  (0) 2016.04.14

태그

댓글0


.    
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     .