[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

댓글을 달아 주세요