본문 바로가기
임베디드.일렉트로닉스/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. GPIO 속도 향상.  (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     선물 인버스 |선물 USDT