[ST_MICRO]/STM32F0x2017. 6. 3. 03:01

STM32 CubeMX - PWM HAL Code 테스트

STM32 CubeMX - PWM HAL Code 테스트






STM32F0의 TIMx 클럭은 PCLK가 소스가 된다. 쵀대 48Mhz로 설정 가능













STM32CubeMX 를 이용하여 TIM1, TIM3 설정탭에서 PWM을 설정한다.






파라 미터 설정은 적정한 값으로 설정한다.


10khz 주파수로 PWM 출력을 하려면 어떻게 설정 해야 할까?
10Khz는 100us 이므로 ARR 레지스터에 100us가 되는 값을 설정하면 된다.

먼저 48Mhz를 48로 나누어 1Mhz -> 1us로 되도록 하고 ARR값에 100을 넣으면 100us 가 된다. (주의 사항은 0부터 시작하므로 1을 빼준 값을 설정해야 한다.)







  //프리스케이일
  TIM1->PSC = 48-1;

  //주파수 편경
  freq = 100;// 100us
  TIM1->ARR = freq-1;

  //펄스폭 가변
  TIM1->CCR1 = freq/2-1;





이렇게 설정하고 구동 시켜보면 10khz 주파수로 PWM 출력 되는것을 확인 할 수 있다.





그럼 STM32F0에서 최대 PWM 주파수는 얼마 까지 가능할까?

48Mhz -> 0.20833333ns 이므로 100단계 PWM을 생각 한다면 480Khz 정도 될것 같다.



1Mhz로 PWM출력을 내려고 하면 50단계도  되지 않는 수준이다.

8비트 해상도 256단계 정도로 설정한다면 최대 187.5Khz정도 이다.




STM32 PWM출력 Start

//PWM CH1 Start

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);




STM32 펄스폭 및 주파수 설정

  //펄스폭 가변

  TIM1->CCR1 = 50-1;



  //주파수 변경

  TIM1->ARR = 100-1;





STM32F0 PWM 테스트 코드

int main(void)

{


  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration----------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();


  /* Configure the system clock */

  SystemClock_Config();


  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_USART1_UART_Init();

  MX_TIM1_Init();


  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

  HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);


  //펄스폭 가변

  TIM1->CCR1 = 50-1;


  //주파수 변경

  TIM1->ARR = 100-1;


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */


  }

  /* USER CODE END 3 */


}





Posted by nexp
TAG PWM, STM32F0

댓글을 달아 주세요

[ST_MICRO]/STM32F0x2016. 5. 30. 03:10

STM32F030 UART2 테스트 오동작

STM32F030 UART2 테스트 오동작



STM32F030 을 이용하여 USART2를 테스트 중에 이상한 점을 발견 했다.

USART1 을 사용 할 때도 문제가 전혀 없었고  STM32F103 , STM32F 테스트 할때도 문제가 없었는데... 잘 사용하던 코드인데 동작을 하지 않는다.


컴파일러 문제가 인지 스텍 크기 문제 인지?


아무튼 USART_Cmd() 함수를 초기화 설정 함수내에서 호출 하면 문제가 없는데... 다른 함수에서 호출 하면 문제가 되고 있다.



void U1_SetBaud(unsigned char baud)

{

         :


        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);


GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

// USART1 Tx: PA9; Rx: PA10.

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

    

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_Init(GPIOA, &GPIO_InitStructure);    


    

USART_InitStructure.USART_BaudRate = baud_rate;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_Init(USART2, &USART_InitStructure);  


        USART_Cmd(USART2,ENABLE);  

}



기존 코드에서 USART초기화 부분을 수정하니 잘 동작한다.

void U1_Init(unsigned char baud)

{

U1_SetBaud(baud);

//USART_Cmd(USART2, ENABLE);

}




Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F0x2015. 9. 6. 02:47

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

[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 테스트 모듈 연결하여 테스트 중)














Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F0x2015. 5. 24. 00:38

[STM32F050 EVM] - STM32F050, STM32F030 보드 제작

[STM32F050 EVM] - STM32F050, STM32F030 보드 제작



Cortex-M0 코어의 소형 패키지 STM32F050K 칩이 저렴하게 판매해서 테스트 보드겸 만들어 보았다.

소형 패키지에 맞는 s-Type EVM형태로 보드를 제작해 여러 확장 보드애서다양한 테스트가 가능하다.

소형이고 저렴한 가격이라 여러 어플리케이션에 적용하면 좋을것 같다. 비슷한 가격대의 NXP사의 LPC1112 와 비교해 볼만 하다.


- Coretex-M0+

- 16k Flash/4k Ram

- 48Mhz

- 27 IO





s-Type EVM형태의 확장 테스트 보드에 연결





Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F0x2015. 4. 29. 16:21

STM32F030 I2C, UART 디자인시 주의 사항

STM32F030  I2C, UART 디자인시 주의 사항


STM32F030, STM32F050 시리즈에서 TSSOP타입의 소형 페키지는 기존 STM32F1 시리즈와 비교 했을때 약간의 핀맵 차이가 있다.


대부분의 핀은 거의 유사한데 I2C의 경우 UART와 공유하기 때문에 I2C와 UART를 동시에 사용해야 한다면 UART 핀을 리맵해서 사용해야 하므로 주의가 필요하다.


PA9

USART1_TX,TIM1_CH2,TIM15_BKIN,I2C1_SCL



PA10

USART1_RX,TIM1_CH3,TIM17_BKIN,I2C1_SDA




PA13

SWCLK, IR_OUT



PA14

USART1_TX, USART2_TX, SWCLK



PA15

SPI1_NSS, USART1_RX, USART2_RX, EVENTOUT





STM32F103, STM32F030, STM32F050 UART 차이점

STM32F103의 경우 PA2, PA3이 UART2로 할당되어 있지만 STM32F030C6은 하나의 채널만 있으므로 주의를 요한다. 다만 STM32F0x는 UART1에 리맵해서 사용 할 수 있다.

STM32F030C8의 경우 UART가 2채널이기 때문에 UART2를 사용할 수 있다.


PA2 USART1_TX / USART2_TX / TIM15_CH1 / ADC_IN2

PA3 USART1_RX / USART2_RX / TIM15_CH2 / ADC_IN3



STM32F050의 경우 UART가 한채널만 제공된다.

PA2  TIM2_CH3 / USART1_TX / ADC_IN2

PA3  TIM2_CH4 / USART1_RX / ADC_IN3

Posted by nexp

댓글을 달아 주세요