초보의 아웅다웅 설계하기 336

Keil에서 함수를 RAM상에 올려서 사용하기

Flash 메모리의 접근 속도가 느릴 경우 자주 쓰는 함수들을 RAM에 올려놓고 쓰는 것이 속도에 대한 방안이 될 수 있을 것 같습니다.(실제로 해보지는 않았습니다... 저는 다른 용도때문에 올렸습니다.) 우선 Keil의 프로젝트 옵션에서 Linker항목에서 Use Memory Layout from Target Dialog의 체크를 풀어서 Scatter File 파일을 사용하게끔 설정하여야 합니다. Keil을 사용하면 기본구조는 나와있기때문에 그다지 어렵지 않게 사용할 수 있습니다. ramfunction.c라는 파일에 foo 섹션을 만들어(예제 사이트 참조) 사용하였고 sct 파일에 섹션의 위치를 설정해주었습니다. 그리고 아래처럼 함수의 위치를 main 함수에서 불러주었습니다. printf("Func L..

인터럽트 벡터 위치 확인과 변경

정식으로 드라이버와 데이터 시트를 받지 못했을 경우 인터럽트 벡터 위치를 직접 확인해서 넣어야하는 경우가 있습니다. 그럴때 다소 귀찮긴 하지만 하나씩 인터럽트 벡터를 살린 후 데이터가 들어오는 인터럽트 벡터 번호를 찾아서 매핑해주면 사용할 수 있습니다. Uart0번의 벡터를 체크한 부분입니다. 인터럽트와 별도로 Uart 설정은 따로 해주어야 합니다. void INT_All_Enable(void) { int Interrupt_Vector_Num = 0; DEBUGPRINT("\r\n NORMAL MODE TEST"); for( Interrupt_Vector_Num= 0; Interrupt_Vector_Num < 239; Interrupt_Vector_Num++){ NVIC_ClearPendingIRQ(In..

PADS - Fatal Data Base Error Number 2012 문제

EVM 제조사에서 받은 회로 파일을 변경하여 기존 PCB 파일에 ECO 변경하여 사용하려고 하니 Fatal Data Base Error Number 2012 문제가 발생하네요. 특별한 조치없이 파일을 ASC로 EXPORT한 후에 IMPORT해서 ECO 변경을 하니 해결되었습니다. (저는 IMPORT시에 에러를 줄이기 위해 기존 PCB 파일의 START-UP 파일을 넣어두고 NEW FILE를 생성할 때 불러서 작업을 했습니다.) 순서는 아래처럼 하였습니다. 1. 기존 START-UP 파일 저장 2. PCB 파일 ASC로 EXPORT 3. 저장한 START-UP 파일로 새파일 생성 4. EXPORT한 ASC 파일을 IMPORT 5. ECO 변경(ECO 작업 한 부분은 제외하였습니다.)

STM32 PID 제어

ADC로 전류값을 읽어온 후 180mA로 타겟값을 맞췄습니다. (미제어시 125mA ~ 170mA 정도 소요) => arm에서 제공하는 arm_cortexMxxx_math.lib를 사용 #define TAGET_ADC 1000 void PID_ADC(uint8_t *chpADC, uint8_t chSize) { Get_RAWADC(s_chpBuf[s_ADCpointer++]); PID_CurrentControl(Average(s_chpBuf, ADCCNT, 1), TAGET_ADC); if(s_ADCpointer >= ADCCNT){ s_ADCpointer = 0; } } /*************************************************************************..

STM32H750 ReadProtection, BrownOutReset 설정

ReadProtection은 설정하고 나면 옵션을 지우고 플래쉬가 삭제되어야만 사용할 수 있으니 주의가 필요합니다. #define BORLEVEL OB_BOR_LEVEL1 #define RDPLEVEL OB_RDP_LEVEL_1 #define BOR_FLAG_TIMEOUT 3000 /******************************************************************************* * Function Name : * Parameters : None * Return : None * Description : *******************************************************************************/ void Con..

STM32H750 내부 온도 센서 값 읽기

ADC1을 설정하고 ADC를 읽어오다가 내부 온도 센서나 BAT 값을 읽어보려고 설정을 하였지만 값을 제대로 읽어오지 못하였습니다. 왜 안될까 고민하다가 데이터 시트를 펼쳤습니다. !!!??? In addition, there are 5 internal dedicated channels – The internal reference voltage (VREFINT), connected to ADC3 – The internal temperature sensor (VSENSE), connected to ADC3 – The VBAT monitoring channel (VBAT/4), connected to ADC3 The ADCs are connected to 5 internal analog inputs: – t..

STM32H750 내부 Flash 사용하기

기본 제공되는 SDK를 사용해보려고하니 외부 메모리를 사용하는 타입(STM32H750B-DK)이라 정상동작 하지 않았습니다. 그래서 ROM, RAM 영역을 다시 설정해 주었습니다. 일단 컴파일러에서 ROM과 RAM 영역을 설정한 후 system_stm32h7xx.c를 설정해주면 정상적으로 동작합니다. (USB HS MSC를 사용하려고 하는데 무슨 설정을 잘못하였는지 메모리 설정이 안나가네요. HID는 잘되는데.... 후~ 갈 길이 멀어보입니다.) keil의 경우 system_stm32h7xx.c에서 #ifdef VECT_TAB_SRAM SCB->VTOR = D1_AXISRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #..

STM32F723 UART LL_DRIVER 예제

뭘 좀 잘못한 걸까요? F723이 H743보다 더 빠르다니 이해가 잘 안되네요. 하지만 STM32F103이 STM32F091보다 연산이 느린걸 보면 그럴수도 있다고 생각이 되기도 하네요.(내부 플래쉬 메모리 접근 구조나 이런 차이일까요? 아님 캐쉬를 안 돌렸나? 확인 안해봤으니 상상의 나래만 ㅋㅋ큐ㅠㅠㅠ 캐쉬설정하니 속도가 엄청나게 나오네요. 393us가 걸렸던게 81us로 바뀌네요.) USB HS PHY가 안에 들어있어서 써볼까 생각했었는데 더 잘 되었네요. 다만 UFBGA나 WLCSP 타입이라서 아트웍이나 PCB 제작 후 수삽할 때 짜증이.... ㅠㅠ STM32F091 - ARIA 128/192/256, CTR Mode ARIA CTR 128 32BYTE - 1827us ARIA CTR 192 32B..