STM32F429 180Mhz 클럭 구동 설정

[ST_MICRO]/STM32F4 | 2014/06/18 11:58
Posted by nexp

STM32F429 180Mhz 클럭 구동 설정


STM32F429는 180Mhz까지 구동 가능하다. 기존 STM32F4 코드 system_stm32f4xx.c 파일에서 수정가능하다.


#if _USE_MAINCLK_168MHZ

// 168Mhz

#define PLL_N      336

  

uint32_t SystemCoreClock = 168000000;

#endif




#if _USE_MAINCLK_180MHZ

// 180Mhz

#define PLL_N      360


uint32_t SystemCoreClock = 180000000;

#endif


저작자 표시 비영리 변경 금지

ADucM360 24bit ADC 테스트

[AnalogDevice]/ADucM360 | 2014/06/15 22:30
Posted by nexp

ADucM360 24bit ADC 테스트





ADucM360 은 Cortex-M3코어에 24bit 정밀 ADC를 내장한 MCU이다.

가장 강점이 24비트 ADC테스트를 간단히 진행해 보았다.



ADucM360  ADC블록도

입력 임피던스를 위한 Rail-To-Rail 버퍼와 128 PGA 및 필터가 내장되어 있다.



ADucM360 ADC 레지스터

ADCxCON 레지스터가 가장 중점 적으로 봐야할 레지스터 인것 같다.

 ADC0CON (ADuCM360 Only)

 ADC1CON (ADuCM360 and ADuCM361)


레퍼런스 설정 및 채널 설정등을 할 수 있다.





레퍼런스 제어 레지스터

REFCTRL

REFPD


Power-down reference. This bit must be cleared for the ADCs to work, regardless of if an external 

reference is selected. 

 0: Enable internal reference block. 

 1: Power down internal reference block.

 

 

 ADucM360 ADC초기화 함수

void ADC1INIT(void)

{

    // 인터럽트 사용

    AdcMski(pADI_ADC1,ADCMSKI_RDY,1);


    // ADC filter set for 3.75Hz update rate with chop on enabled

    AdcFlt(pADI_ADC1,124,14,FLT_NORMAL|ADCFLT_NOTCH2|ADCFLT_CHOP); 

     // 내부레퍼런스 , Gain of 1, Signed integer output

    //AdcRng(pADI_ADC1,ADCCON_ADCREF_INTREF,ADCMDE_PGA_G1,ADCCON_ADCCODE_INT); 

    // AVDD레퍼런스 , Gain of 1, Unsigned integer output

   AdcRng(pADI_ADC1,ADCCON_ADCREF_AVDDREF,ADCMDE_PGA_G1,ADCCON_ADCCODE_UINT);

    // Turn off input buffers to ADC and external reference

    AdcBuf(pADI_ADC1,ADCCFG_EXTBUF_OFF,ADCCON_BUFBYPN|ADCCON_BUFBYPP|ADCCON_BUFPOWP|ADCCON_BUFPOWN); 


   // 채널 선택  AIN1 - negative input, AIN0 - postive input

   AdcPin(pADI_ADC1, ADCCON_ADCCN_AIN1, ADCCON_ADCCP_AIN0); 

}



ADC 인터럽트 핸들러 함수

void ADC1_Int_Handler ()

{

   // read ADC result register

   ulADC1Result = AdcRd(pADI_ADC1);

}




ADucM360 24bit ADC테스트 동영상




ADucM360 24bit ADC테스트 예제코드
int main (void)
{
    _SystemInit();
    U0_Init(BAUD_115200);
    U0_PutStr("ADucM360 24bit ADC Test\r\n");
    
    Led1Init();
    Led1On();
    
    // Place ADC1 in Idle mode        
    AdcGo(pADI_ADC1,ADCMDE_ADCMD_IDLE);
    ADC1INIT();
    
    // Start ADC1 for continuous conversions
    AdcGo(pADI_ADC1,ADCMDE_ADCMD_CONT);
    // Enable ADC1 and UART interrupt sources   
    NVIC_EnableIRQ(ADC1_IRQn);
    
    while (1)
    {
        DebugPrint("%d\r\n", ulADC1Result);
        Delay(100);      // Delay routine
    }
}



저작자 표시 비영리 변경 금지
TAG AducM360

LM3S101 IAR과 JLINK를 이용한 디버깅 환경구축















저작자 표시 비영리 변경 금지

ADuM360 UART 테스트

[AnalogDevice]/ADucM360 | 2014/06/14 17:53
Posted by nexp

ADuM360 UART 테스트




ADucM360 UART 초기화 함수

ADucM360은 UART는 아래와 같이 GPCON레지스터를 이용해 핀맵을 2개의 포트에 할당 할 수 있다. ADucM360 EVM 에서는 P0.6, P0.7에 할당 해 두었고 USB2UART를 이용하여 PC와 UART통신이 가능하다.


P0.1/SCLK1/SCL/SIN

P0.2/MOSI1/SDA/SOUT


P0.7/POR/SOUT

P0.6/IRQ2/SIN



void U0_Init(unsigned char baud)

{

   //Select IO pins for UART.

   //pADI_GP0->GPCON |= 0x3C;                     // Configure P0.1/P0.2 for UART

    pADI_GP0->GPCON |= 0x9000;                   // Configure P0.6/P0.7 for UART

    ClkSel(CLK_CD6,CLK_CD7,CLK_CD0,CLK_CD7);     // Select CD0 for UART System clock

   

    U0_SetBaud(baud);

    

   UrtMod(pADI_UART,COMMCR_DTR,0);              // Setup modem bits

   UART IRQ sources

}




ADucM360 UART 송수신 함수

COMLSR 레지스터에서 UART 송수신 상태를 읽어서 처리하면 간단히 해결된다. 수신시는 DR비트를 송신시에는 THRE비트를 확인하여 처리한다.

unsigned char U0_GetByte(void)

{

//데이터가 수신되면

while (!(pADI_UART->COMLSR & COMLSR_DR));


//데이터 읽어옴

return pADI_UART->COMRX;

}


void U0_PutByte(unsigned char Data)

{

      //송신 FIFO가 비어지면

      while(!(pADI_UART->COMLSR & COMLSR_THRE));

    

      //데이터 전송

      pADI_UART->COMTX = Data;

}






ADucM360 UART 테스트 예제코드

int main (void)

{

    unsigned int cnt = 0;

    

    _SystemInit();

    U0_Init(BAUD_115200);

    U0_PutStr("ADucM360 UART Test\r\n");

    

    Led1Init();

    Led1On();

    

    while (1)

    {

        Led1Toggle();

        DebugPrint("CNT=%d\r\n", cnt++);

        Delay(500);      

    }

}



저작자 표시 비영리 변경 금지

ADucM360 디버깅 및 펌웨어 다운로드 (CM3WSD)

ADucM360 은 Cortex-M3코어 이기 때문에 JLINK와 같은 ARM디버깅툴을 이용아여 디버깅 및 펌웨어 다운로드가 가능하다.

그리고 칩 자체의 부트로더를 이용하여 시리얼 포트로도 펌웨어 다운로드를 할 수 있다.



아래 핀맵은 표준으로 사용하고 있는 SWD커넥터이다.




디버깅툴이 없다면 자체 부트로더를 이용하여 시리얼 포트로 펌웨어 다운로드 가능하다.

AnalogDevice사에서 CM3WSD 라는 프로그램을 제공한다.(ADuC7K에서는 ARMSWD라는 프로그램을 제공 했었다)


cm3wsd.zip





ADucM360에서 부트모드 진입은 P2.2(BM) 핀을 GND로 한 상태에서 리셋하면 된다.

주의 사항은 부트모드에서 UART 포트는 P0.1, P0.2로 고정되어 있다는 점이다.






저작자 표시 비영리 변경 금지

블로그 이미지

nexp

카테고리

분류 전체보기 (1423)
[MyProject] (32)
[Cortex] (81)
[NXP] (36)
[ST_MICRO] (83)
[FreeScale] (30)
[MSP430] (116)
[Microchip] (121)
[AnalogDevice] (22)
ARM9 (24)
[ARM7] (47)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (58)
[INTERFACE] (206)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (121)
[SENSOR] (40)
[DATA] (21)
[FPGA/PLD] (29)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)

티스토리 툴바