STM32F3 시리즈

[ST_MICRO]/STM32F3 | 2016.12.07 14:05
Posted by nexp

STM32F3 시리즈


STM32F3 시리즈는 Cortex-M4 코어의 72Mhz 클럭으로 동작하는 저가형 MCU이다.

STM32F1 시리즈 보다는 성능이 좀더 향상되고 STM32F4 시리즈 보다는 다운그레이드되지만 저렴한 그리고 아날로그에 좀더 특화된 시리즈 인것 같다.


스펙을 보면 아날로그 쪽으로 특화 되어 있다.

- Ultra-fast comparators (25 ns)

- Op-amp with programmable gain

- 12-bit DACs

- Ultra-fast 12-bit ADCs with 5 MSPS per channel (up to 18 MSPS in Interleaved mode)

- Precise 16-bit sigma-delta ADCs (21 channels)

- Core Coupled Memory SRAM , a specific memory architecture boosting time-critical routines, accelerating the performance by 43%

-144 MHz Advanced 16-bit pulse-width modulation timer (resolution < 7 ns) for control applications

- High resolution timer (217 picoseconds), self-compensated vs power supply and temperature drift



특징적으로 눈이 띄는것은 16비트 ADC이다. 12비트로 아쉬운 프로젝트에 적용하면 좋을것 같다. 프리스케일 (지금은 NXP)사의 M시리즈에 16bit ADC를 사용해 봤는데 저가격이라 성능면에서 아쉬웠는데... STM32F3에서는 괜찮아 보인다.



STM32F3 시리즈도 여러 모델이 있는데 STM32F37X 가 정밀 아날로그 측정에 특화되어 있는것 같다.




마침 온라인 쇼핑몰에서 1$대로 저렴하게 판매하고 있다.

테스트 해 보고 싶은 욕구가 생긴다.




[STM32F030-S EVM] 보드 제작 - STM32F030F4P6TR 테스트




ST의 Cortex-M0 코어중 가장 저렴한 STM32F030F4P6TR 를 테스트 할수 있는 소형 테스트 보드를  s-Type 형태로 제작 했다.

0.5$ 정도에 구매 할수 있으므로 저렴하면서 어느정도 성능이 필요한 프로젝트에 적용하면 좋을것 같다. 특히 기존 STM32 코드를 약간의 수정으로 작성 가능하다. (ST에서 프로모션 하는 가격은 32센트 이다. 32센트 하는 32bit MCU로 선전하고 있다.)


Architecture : ARM Cortex-M0

CPU Speed : 48MHz

Program Memory Size : 16KB

RAM Memory Size : 4KB

No. of Pins : 20

MCU Case Style : TSSOP

No. of I/O's : 15

Embedded Interface Type : I2C, SPI, USART

Supply Voltage Min : 2.4V

Supply Voltage Max : 3.6V

Packaging : Cut Tape

MSL : MSL 3 -168 hours





보드는 기존 핀맵을 유지하면서 가능한 간단하게 제작 했다.





S-Type EVM 형태의 핀맵으로 기존 확장 테스트 보드에서 쉽게 테스트 가능하다.






STM32F030-S EVM 핀맵 회로도







S-Type EVM 의 다앙한 확장 보드에 연결하여 테스트 가능하다. (WiFi 테스트 모듈 연결하여 테스트 중)














STM32 내부클럭 사용하기

[ST_MICRO]/STM32 | 2014.07.13 11:39
Posted by nexp

STM32 내부클럭 사용하기

보드 단가를 낮추기 위해서는 내부 오실레이터를 이용하면 좋은데 특히 STM32F100 시리즈는 저렴하기 때문에 보드 단가 측면에서 내부 오실레이터를 사용하는것이 유리하다. 


다만 디폴트가 PLL클럭의 1/2이다.

따라서 최대 64Mhz로 구동 하므로 주의가 필요 하다. (외부 8Mhz 구동시 최대 72Mhz로 구동가능하다.)

    PLLCLK = 8MHz/2 * 16 = 64 MHz 





/* PLL entry clock source */

#define RCC_PLLSource_HSI_Div2           ((u32)0x00000000)

#define RCC_PLLSource_HSE_Div1           ((u32)0x00010000)

#define RCC_PLLSource_HSE_Div2           ((u32)0x00030000)



void RCC_Configuration(void)

{

  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   

     

  /* RCC system reset(for debug purpose) */

  RCC_DeInit();


  /* Disanable HSE */

  RCC_HSEConfig(RCC_HSE_Bypass);


  /* Wait till HSE is ready */

  HSEStartUpStatus = RCC_WaitForHSEStartUp();


  //if(HSEStartUpStatus == SUCCESS)

  {

    /* Enable Prefetch Buffer */

    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);


    /* Flash 2 wait state */

    FLASH_SetLatency(FLASH_Latency_2);

 

    /* HCLK = SYSCLK */

    RCC_HCLKConfig(RCC_SYSCLK_Div1); 

  

    /* PCLK2 = HCLK */

    RCC_PCLK2Config(RCC_HCLK_Div1); 


    /* PCLK1 = HCLK/2 */

    RCC_PCLK1Config(RCC_HCLK_Div2);


    /* On STICE the PLL output clock is fixed to 72 MHz */

//    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);    //64 Mhz


    /* Enable PLL */ 

    RCC_PLLCmd(ENABLE);


    /* Wait till PLL is ready */

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

    {

    }


    /* Select PLL as system clock source */

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);


    /* Wait till PLL is used as system clock source */

    while(RCC_GetSYSCLKSource() != 0x08)

    {

    }


  }

}






[STM32F4-100 EVM] USB Host 보드 제작


STM32F407/STM32F17 , STM32F2는 USB Host기능을 지원하는데, STM32F1, STM32F2, STM32F4를 모두 사용할 수 있는 보드를   [M-Type EVM] 형태로 새롭게 제작했다.




USB Device/Host 기능 모두 지원 할수 있도록 커넥터를 배치 했다.



STM32시리즈는 UART 프로그램이 가능하기 때문에 USB2UART 연결할 수 있는 커넥터를 연결할 수 있다.



STM32F4 확장 테스트 보드
[M-Type EVM] 표준 핀맵이므로 기존 확장 테스트 보드에 연결하여 테스트 가능하다.



[LCD_EXP_EVM] 보드 

[STM32-SM2 EVM] W5200 이더넷 테스트 -  NET-EVM 보드



STM32를 이용하여 [NET-EVM] 보드에서 W5200 모듈을 테스트 했다.





[NET-EVM] W5100/W5200용 커넥터




STM32-SM2는 핀맵이 약간 수정되었는데.. W5200의 /RST(INT0) 핀이 3.3V로 연결되기 때문에 3.3V끊고 PA15와 0옴으로 연결해 주어야 한다.




W5200 드라이버 코드
//-----------------------------------------------------------------------------
// W5100 HAL
#define _SPI1_ENABLE     1

#define W5100_CS_PORT     GPIOB
#define W5100_CS_BIT     BIT12
#define IINCHIP_RSToff()    cbi(W5100_RST_PORT, W5100_RST_BIT) 
#define IINCHIP_RSTon()     sbi(W5100_RST_PORT, W5100_RST_BIT)

#define W5100_IO_INIT()     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);\
          GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;\
          GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;\
          GPIO_InitStructure.GPIO_Pin=BIT12;\
          GPIO_Init(GPIOB, &GPIO_InitStructure);\
          GPIO_InitStructure.GPIO_Pin=BIT15;\
          GPIO_Init(GPIOA, &GPIO_InitStructure);


#define W5100_RST_PORT     GPIOA
#define W5100_RST_BIT     BIT15

#define IINCHIP_CSoff()     cbi(W5100_CS_PORT, W5100_CS_BIT) 
#define IINCHIP_CSon()     sbi(W5100_CS_PORT, W5100_CS_BIT)

#define IINCHIP_SPI_INIT()    SPI1_Init()
#define IINCHIP_SpiSendData    SPI1_WriteReadByte
#define IINCHIP_SpiRecvData     SPI1_WriteReadByte




STM32 TCP/IP 전송 속도 테스트
최대 SPI클럭 18Mhz 인 STM32에서 전송 속도는 2Mbps정도 출력된다.

코드 옵티마이즈 후 2.5Mbps 까지 가능하다.





소형 STM32

[ST_MICRO]/STM32 | 2011.06.10 17:52
Posted by nexp
소형에 UART 2개 이상인 MCU를 찾다보니 저렴한 가격에 STM32가 제일 좋은것 같다.

확인해 보니 아래과 같이 추려진다.

Generic Part Number Package Operating Frequency (Processor speed) (MHz) FLASH Size (Prog) (kB) Internal RAM Size (kB) 12 or 16-bit timers (IC/OC/PWM) Serial Interface
STM32F101T4 VFQFPN 36 6x6x1-0 36 16 4 2x16-bit (8/8/8) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816)
STM32F101T6 VFQFPN 36 6x6x1-0 36 32 6 2x16-bit (8/8/8) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816)
STM32F101T8 VFQFPN 36 6x6x1-0 36 64 10 3x16-bit (12/12/12) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816)
STM32F101TB VFQFPN 36 6x6x1-0 36 128 16 3x16-bit (12/12/12) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816)
STM32F103T4 VFQFPN 36 6x6x1-0 72 16 6 3x16-bit (12/12/14) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816);USB;CAN
STM32F103T6 VFQFPN 36 6x6x1-0 72 32 10 3x16-bit (12/12/14) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816);USB;CAN
STM32F103T8 VFQFPN 36 6x6x1-0 72 64 20 4x16-bit (16/16/18) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816);USB;CAN
STM32F103TB VFQFPN 36 6x6x1-0 72 128 20 4x16-bit (16/16/18) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816);USB;CAN



TAG QFN, STM32

[TMP275] 정밀 온도센서 테스트

[SENSOR]/Sensor | 2010.08.17 15:31
Posted by nexp
[TMP275] 정밀 온도센서 테스트



TI사의 12비트 0.2(0.5)도 오차율을 가진 정밀 온도 센서 TMP275를 테스트 했다. 보드는 예전에 제작했던 가속도 센서를 활용해서 제작 했는데... I2C핀맵이 호환되므로 동일한 확장 보드에 테스트 가능하다.

TMP275 핀맵



TMP275 온도센서 출력 포멧





정밀도



주요 레지스터



TPM275 테스트 예제 소스코드
// TMP275 온도 센서 데이터 읽기함수
short TMP275Read(unsigned char reg)

 unsigned char h, l; 
 
 TMP275_I2C_START(TMP275_I2C_ADDR+I2C_WRITE);     // device address 및 write mode 설정
 TMP275_I2C_WRITE(reg);                                            // 레지스터 설정
 TMP275_I2C_START(TMP275_I2C_ADDR+I2C_READ);     // device address 및 read mode 설정

 h = TMP275_I2C_ACK();                                 // MSB Data Read
 l = (TMP275_I2C_NAK()>>4)&0x0F;                 // LSB Data Read

 TMP275_I2C_STOP(); 

 return (h<<8)|l;
}


int main(void)
{
    short data;
 float val;
 
 //System Init
 SystemInit();
 
    //LED Init
 Led1Init();
 Led1On();
 
 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("I2C TMP275 Test Program.\r\n");
 DebugPrint("C");

 TMP275Init();

 while (1)
 {
   data = TMP275Read(0);
   val = ((float)(data&0x0F))*0.625*10.0;
   
   DebugPrint("%02d%02d\r\n", (data>>8), val);
   Delay(100);
 }
}


TMP275 정밀 온도센서 테스트
TMP275 테스트를 위해 MCU는 STM32 Sensor Interface Board를 이용하였고, 출력은 Serial FND 모듈 을 이용하여 온도값을 출력했다.


STM32-MP3 모듈 보드 관련자료 - VS1003 MP3 Module + SD Card + STM32



저렴한 STM32F101을 이용하여 VS1033 MP3 모듈 테스트 보드를 제작했다.  3개의 스위치와 2개의 LED가 인터페스가 되어 간단한 MP3 모듈 테스트가 가능하다.






VS1053 MP3 + SD Card Module + STM32



개발환경
STM32는 UART로 프로그램 가능하므로 USB2UART를 이용하면 쉽게 프로그램 가능하다.



D-Class AMP 모듈과 동일한 크기로 제작해서 앰프와 연결 가능 하도록 했다.



[STM32 MP3 Module] 회로도
SD + MP3모듈



확장 커넥터
사용하지 않은 핀들은 표준화된 확장 커넥터로 연결가능하도록 빼두었다.



OnBoard LED / Swtich


STM32-MP3 모듈 보드 제작

[ST_MICRO]/STM32 | 2009.11.14 00:29
Posted by nexp
STM32-MP3 모듈 보드 제작



MP3모듈을 테스트 할 수 있는 [STM32 MP3 Module]를 제작했다. 굴러다니는 STM32F101 이 많아서 소형으로 테스트 모듈로 제작했는데 급하게 제작하다 보니 아쉬운 점이 많네... 그냥 저렴하고 간단한 MP3만들기에 좋지 않을까... 되려 AVR보다 저렴하고 성능도 좋다. 물론 동일한 핀맵의 STM32F103을 이용하면 USB기능도 추가할 수 있다.





VS1053 MP3 + SD Card Module + STM32



[STM32] USB 전송속도 테스트

[INTERFACE]/USB | 2009.10.22 19:30
Posted by nexp
USB 전송 속도 테스트

2009-10-23 19:44:20 금요일
HID방식 데이터 전송 속도 테스트
STM32 USB를 이용하여 HID 데이터 전송 속도 테스트 진행하였다.
64byte 벌크 전송으로 1000개의 버퍼를 보내도록 하고 시작 시간과 종료시간을 측정한 결과 2초가 걸렸다.
초당 전송속도 = (64 x 1000)/2 = 32KByte/s


USB 스펙상 11Mbps =  1.375Mbyte/s 인데...
물론 실제로 USB Bulk 데이터 전송을 위해 3번의 트랜젝션이 필요하므로 하므로 실제 458Kbye/s가 최대 속도가 될테고 PC단 드라이버에서 처리 때문에 반정도 줄어 들어 250Kbyte이상 힘들긴하다. 그래도 7배 이상 차이가 난다.

PC에서 보낼때 for문 돌면서 다른 프로그램에 의해 우선순위가 낮아져 전송 명령 자체가 지연되지 않을까... 그래서 Thread로 전송해 보면 어떨까?
테스트 해보니 Thread를 사용해도 똑같다.
원래 HID속도가 이정도 인가?

1번의 트랜젝션이 이뤄지는데 걸리는 시간을 측정해 보니 2ms걸린다.





STM32에서 HID로 USB전송 속도 테스트를 했다.

64바이트 보내는는데 걸리는 시간을 알아보기 위해 USB엔드포인트 실행 함수 EP1_OUT_Callback() 의 수행 시간을 측정해 보니 6.8us가 걸린다.

혹시나 해서 인터럽트 처리시간을 측정해 보았다.
인터럽트 걸릴때 CTR_LP()함수가 수행 되므로 시간을 측정해 보니 9usw정도가 걸린다.

하지만 연속 전송을 해 보니 아주 느려진다.
두번의 트랜잭션을 일으킬때 2ms시간이 걸린다.

결국 64바이트 전송하는데 걸리는 시간은 2ms로 보면 된다. 1초에 32Kbyte정도 전송할 수 있다고 보면 될것 같다.

USB스펙상 1ms로 보내려면 벌크전송 방식을 써야 하는건가? 너무 느린데...


192kByte이미지를 보내는데 약 3.9초가 걸린다. 초당 50kByte정도 보낸다는 소리인데...
실제로 코드상에서 한번에 54Byte씩 데이터를 실어서 보낸다


->코드 옵티마이즈 하고 스크립트 수정하니 1번 트랜젝션에 1ms 걸린다.
STM32의 USB 관련 코드를 좀더 옵티마이즈 해서 TFT LCD 출력 속도를 높혀 보았다.



블로그 이미지

nexp

카테고리

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