[MSP430FR2311 EVM] 개발환경 설정 - CCS7 무료컴파일러 사용하기




MSP430FR2x 시리즈를 개발하기 위한 환경으로 IAR 최신 버전이 필요하다. 

MSP430 Kickstart 버전을 다운 받으려고 사이트 들어가니 CCSv7(Code Composer Studio V7) 가 무료(솔깃~)라고 한다.


이참에 CCS로 한번 테스트 해볼까?


우선 CCS를 다운 받자

Code Composer Studio V7Sv7     



프로그램 설치 후 MSP430FR2311 디바이스로 새로운 프로젝트를 생성한다. 특별히 설정할것 없이 그냥 간단하게 프로젝트 생성 가능하다.





간단히 LED제어 하는 예제 작성후 다운로드 해보자





다운로드 후 디버깅 환경으로 들어가고 문제 없이 디버깅 되는것을 확인할 수 있다.

예전 버전에서는 툴자체가 불안하고 느렸으며 설정도 복잡 했었는데..

상당히 깔끔하게 잘 동작 하는것 같다. 



앞으로 MSP430 개발에서는 CCS를 적극 활용하는 방향으로 진행해 봐야 할것 같다.



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

[MSP430FR2311 EVM] 보드 제작

[MSP430]/MSP430_FRAM | 2017.03.23 16:04
Posted by nexp

[MSP430FR2311 EVM] 보드 제작






FRAM 기반의 MSP430FR2311을 테스트 할수 있는 보드를 S-Type EVM 형태로 제작 했다.


주요 특징은 아래와 같다.

- 16-Bit RISC Architecture up to 16 MHz

- Active Mode: 126 µA/MHz


- 8-Channel 10-Bit Analog-to-Digital Converter (ADC)

  - Internal 1.5-V Reference

  - Sample-and-Hold 200 ksps


- 6-Bit Digital-to-Analog Converter (DAC) as Reference Voltage

- Smart Analog Combo (SAC-L1)

 -Supports General-Purpose OA

 -Rail-to-Rail Input and Output

 -Multiple Input Selections

 - Current-to-Voltage Conversion


- ±1% Accuracy With On-Chip Reference at Room Temperature

- On-Chip Very Low-Frequency 10-kHz Oscillator (VLO)

- On-Chip High-Frequency Modulation Oscillator (MODOSC)


아날로그 쪽으로 여러가지 기능들이 많이 보강되어 있는데 아무래도 FRAM을 잘 활용할 수 있는 센서 쪽으로 타겟을 하고 있는듯 하다.

특히나 Smart Analog Combo 모듈이 눈여겨 볼 만한것 같다.



아쉬운점이 있다면 기존 MSP430 시리즈(20핀 기준)와는 핀맵 구조가 완전히 달라져서 새롭게 PCB제작 해야 한다는것이다.

큰 회사들의 단점인가?

ST같은 회사는 같은 핀맵, 같은 개발환경을 유지 할수 있도록 하는데... 그런면에서는 아쉬움이 많다.



기능은 많이 추가 되어서 여러가지 용도로 사용하기에 좋은것 같다.







MSP430FR 확장 테스트 보드

표준 핀맵으로 제작해서 여러 다양한 확장 테스트 보드에 연결해서 테스트 가능하도록 했다.











MSP430FR2311 EVM PINMAP 회로도





저작자 표시 비영리 변경 금지
신고
MSP430FR - FRAM MCU 소형 타입 검토

FRAM 메모리를 가진 소형 저가격의 TSSOP타입의 MSP430FR2x 시리즈가 출시되었다.

기존의 MSP430FR5937 EVM 보드 제작 했을때 패키지 크기가 마음에 안들었는데.. 3x3mm QFN, TSSOP 16핀 타입으로 작고 저렴하게 나왔다.


FRAM MCU의 특징은 아래와 같다.

FRAM은 비휘발성으로 전원이 꺼졌을 때 콘텐츠를 유지된다. 

읽고 쓰는 속도가 상당히 빠르다. (MSP 마이크로컨트롤러에 내장된 FRAM은 최대 8MHz의 속도로 액세스(읽기 또는 쓰기)할 수 있다고 한다. MCU 플래시 쓰기 속도는 약 14KBps)

FRAM에 쓰고 FRAM에서 읽는 방식은 SRAM과 유사해서 쓰기 전 사전 삭제와 같은 설정이나 준비 또는 제어 레지스터의 잠금 해제가 필요 없다.

FRAM은 분할되어 있지 않으며 각 비트는 개별적으로 삭제, 쓰기, 주소 지정이 가능하다.

FRAM 세그먼트는 쓰기 전 삭제가 필요하지 않다. FRAM에 쓸 때는 전하 펌프가 필요하지 않기 때문에 FRAM 쓰기 액세스는 소비 전력이 낮다.


*참고로 FRAM은 SRAM보다 더 많은 전력을 소비하고 약간 더 빠르므로 가장 많이 액세스하는 데이터(예를들어 스텍메모리)는 SRAM를 사용하라고 한다





이런 특징들을 볼때 저전력의 백업시스템이 필요한 어플리캐에션에 적합할것 같다. 특히 데이터 로깅 시스템에 적용하면 좋을것 같다.




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

[STM32F439 EVM] 외부인터럽트 테스트


STM32F439 의 외부 인터럽트 소스는 각 포트0에서 15까지로 설정 가능하고 아래와 같이 그룹별로 관리 가능하다.

0에서 4번까지는 각각의 인터럽트 소스를 할당 할 수 있고 5~9, 10~15는 그룹으로되어 있어서 인터럽트 핸들러 내에서 구분해서 사용해야 한다.


EXTI0_IRQn

EXTI1_IRQn

EXTI2_IRQn

EXTI3_IRQn

EXTI4_IRQn

EXTI9_5_IRQn

EXTI15_10_IRQn



STM32F439 EVM 보드의 스위치 회로는 아래과 같고 PA8에 연결되어 있는 스위치를 이용하여 인터럽트 테스트 예제를 작성해 보았다.





STM32F439 외부 인터럽트 초기화 코드

static void EXTILine9_5_Config(void)

{

  GPIO_InitTypeDef   GPIO_InitStructure;


  /* Enable GPIOA clock */

  __GPIOA_CLK_ENABLE();

  

  /* Configure PA0 pin as input floating */

  GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;

  GPIO_InitStructure.Pull = GPIO_PULLUP;

  GPIO_InitStructure.Pin = GPIO_PIN_8;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);


  /* Enable and set EXTI Line0 Interrupt to the lowest priority */

  HAL_NVIC_SetPriority(EXTI9_5_IRQn, 2, 0);

  HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);

}





STM32F439 외부 인터럽트 핸들러 함수

인터럽트 핸들러 함수 EXTI9_5_IRQHandler 내에서 HAL_GPIO_EXTI_Callback함수를 호출하는 구조로 되어 있다.


void EXTI9_5_IRQHandler(void)

{

  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);

}


void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

  if(GPIO_Pin == GPIO_PIN_8)

  {

        Led1Toggle();

  }

}


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

[STM32F439 EVM] I2C 테스트

[ST_MICRO]/STM32F43x | 2016.12.31 12:51
Posted by nexp

[STM32F439 EVM] I2C 테스트




[STM32F439 EVM] 에는 PB8(SCL), PB9(SDA)에 I2C가 할당되어 있다.




STM32F439 I2C 초기화 코드

I2C_HandleTypeDef I2cHandle;


#define I2Cx                             I2C1

#define I2Cx_CLK_ENABLE()                __I2C1_CLK_ENABLE()

#define I2Cx_SDA_GPIO_CLK_ENABLE()       __GPIOB_CLK_ENABLE()

#define I2Cx_SCL_GPIO_CLK_ENABLE()       __GPIOB_CLK_ENABLE() 


#define I2Cx_FORCE_RESET()               __I2C1_FORCE_RESET()

#define I2Cx_RELEASE_RESET()             __I2C1_RELEASE_RESET()


/* Definition for I2Cx Pins */

#define I2Cx_SCL_PIN                    GPIO_PIN_8

#define I2Cx_SCL_GPIO_PORT              GPIOB

#define I2Cx_SCL_AF                     GPIO_AF4_I2C1

#define I2Cx_SDA_PIN                    GPIO_PIN_7

#define I2Cx_SDA_GPIO_PORT              GPIOB

#define I2Cx_SDA_AF                     GPIO_AF4_I2C1


void I2CMaster_Init(void)

{

  GPIO_InitTypeDef  GPIO_InitStruct;

  

  /*##-1- Enable peripherals and GPIO Clocks #################################*/

  /* Enable GPIO TX/RX clock */

  I2Cx_SCL_GPIO_CLK_ENABLE();

  I2Cx_SDA_GPIO_CLK_ENABLE();

  /* Enable I2C1 clock */

  I2Cx_CLK_ENABLE(); 

  

  /*##-2- Configure peripheral GPIO ##########################################*/  

  /* I2C TX GPIO pin configuration  */

  GPIO_InitStruct.Pin       = I2Cx_SCL_PIN;

  GPIO_InitStruct.Mode      = GPIO_MODE_AF_OD;

  GPIO_InitStruct.Pull      = GPIO_PULLUP;

  GPIO_InitStruct.Speed     = GPIO_SPEED_FAST;

  GPIO_InitStruct.Alternate = I2Cx_SCL_AF;

  

  HAL_GPIO_Init(I2Cx_SCL_GPIO_PORT, &GPIO_InitStruct);

    

  /* I2C RX GPIO pin configuration  */

  GPIO_InitStruct.Pin = I2Cx_SDA_PIN;

  GPIO_InitStruct.Alternate = I2Cx_SDA_AF;

    

  HAL_GPIO_Init(I2Cx_SDA_GPIO_PORT, &GPIO_InitStruct);

  

  

  I2cHandle.Instance             = I2Cx;

  

  I2cHandle.Init.AddressingMode  = I2C_ADDRESSINGMODE_7BIT;

  I2cHandle.Init.ClockSpeed      = 100000;

  I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED;

  I2cHandle.Init.DutyCycle       = I2C_DUTYCYCLE_2;

  I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_ENABLED;

  I2cHandle.Init.NoStretchMode   = I2C_NOSTRETCH_DISABLED;

  I2cHandle.Init.OwnAddress1     = 0xFE;//I2C_ADDRESS<<1;

  I2cHandle.Init.OwnAddress2     = 0xFE;    

  

  

  HAL_I2C_Init(&I2cHandle);

}




STM32F439 I2C Read/Write 함수

HAL_I2C_Master_Transmit(),  HAL_I2C_Master_Receive() 함수를 사용하면 쉽게 I2C제어가 가능하다.

unsigned char read8(unsigned char addr, unsigned char data)

{

    unsigned char result;


    unsigned char tx_buf[2];

    unsigned char rx_buf[4];

    tx_buf[0] = data;

    

    

    //gTimerTick6 = 0;

    while(HAL_I2C_Master_Transmit(&I2cHandle, (uint16_t)addr, (uint8_t*)tx_buf, 1, 10000)!= HAL_OK)

    {

        //if(gTimerTick6>200)break;

    }

    

    //gTimerTick6 = 0;


    while(HAL_I2C_Master_Receive(&I2cHandle, (uint16_t)addr, (uint8_t *)rx_buf, 1, 10000) != HAL_OK)

    {

//if(gTimerTick6>200)break;

    }

  


    result = rx_buf[0];



    return result;


}


void write8(unsigned char addr, unsigned char reg, unsigned char data)

{

    unsigned char result;


    unsigned char tx_buf[2];

    unsigned char rx_buf[4];

    tx_buf[0] = reg;

tx_buf[1] = data;

    

    

    //gTimerTick6 = 0;

    while(HAL_I2C_Master_Transmit(&I2cHandle, (uint16_t)addr, (uint8_t*)tx_buf, 2, 10000)!= HAL_OK)

    {

        //if(gTimerTick6>200)break;

    }

}


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

블로그 이미지

nexp

카테고리

분류 전체보기 (1550)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (128)
[FreeScale] (31)
[MSP430] (139)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (210)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (127)
[SENSOR] (41)
[DATA] (21)
[FPGA] (29)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)

티스토리 툴바