STM 32 의 usart 2 직렬 디 버 깅

먼저 참고 하 다http://wenku.baidu.com/view/78f6b1350b4c2e3f572763e9.html전근 되 었 다
usart1
그리고 프로그램 을 수정 하고 Usart 2 를 설정 합 니 다. 설정 이 끝 난 후에 도 프로그램 이 정확 하지 않 습 니 다. 그리고 void 에 있 습 니 다. GPIO_cfg();함수 에 한 문장 추가 
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
마지막 절 차 는 다음 과 같다.
#include "stm32f10x_lib.h"

 

FlagStatus RX_status;
FlagStatus Tx_status;

 

void RCC_cfg(void);

void GPIO_cfg(void);

void USART_cfg(void);

void NVIC_cfg(void);

unsigned char Rxbuf[20];

int index_send,index_rev;

u8 flag;

 

 

int main()

{

       int i;



       unsigned char TxBuf1[] = "Welcome to my STM32!I'm idiot!";

	   index_send = 0;
	   index_rev = 0;
	   flag = 0;

       RCC_cfg();

       GPIO_cfg();

       NVIC_cfg();

       USART_cfg();

 

       //     ,   1      

       USART_ClearFlag(USART2,USART_FLAG_TC);

 

       //    

       //PB5            

       //          ,PB5  

       for( i=0;TxBuf1[i]!='\0';i++)

       {

              USART_SendData(USART2,TxBuf1[i]);

              GPIO_SetBits(GPIOB,GPIO_Pin_5);

              //        

              while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);

              GPIO_ResetBits(GPIOB,GPIO_Pin_5);

       }

 
       while(1)
	   {
	       
	   }

 

}

 

 

//RCC    

void RCC_cfg()

{
      

       // RCC           

       RCC_DeInit();

         //  GPIO  ,    ,  1   

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
		 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
}

 

//IO   

void GPIO_cfg()

{

       GPIO_InitTypeDef GPIO_InitStructure;

 

       //PAD5  US2 TX ,    ,      

       GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
	   
	   GPIO_StructInit(&GPIO_InitStructure);

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

       GPIO_Init(GPIOD , &GPIO_InitStructure);

 

       //PD6  US2 RX ,      

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

       GPIO_Init(GPIOD, &GPIO_InitStructure);

 

       //LED        /    

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

       GPIO_Init(GPIOB, &GPIO_InitStructure);

}

 

//     

void USART_cfg()

{

       USART_InitTypeDef USART_InitStructure;

       //           

       USART_StructInit(&USART_InitStructure);

    //      115200

       USART_InitStructure.USART_BaudRate = 115200;

       //          8bits

       USART_InitStructure.USART_WordLength = USART_WordLength_8b;

       //      1    

       USART_InitStructure.USART_StopBits = USART_StopBits_1;

       //      ,     

       USART_InitStructure.USART_Parity = USART_Parity_No;

       //  /    

       USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

       //       

       USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

       //    2

       USART_Init(USART2, &USART_InitStructure);

      

       //    2       ,    

       USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

       //    2

       USART_Cmd(USART2, ENABLE);

}

 

//    

void NVIC_cfg()

{

        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                               //      2

        

        

        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;                              //    2  

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                                 //           0

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                            //           0

        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                 //    

        NVIC_Init(&NVIC_InitStructure);

}

 
void USART2_IRQHandler(void)

{
       GPIO_SetBits(GPIOB, GPIO_Pin_5);
       //         

       RX_status = USART_GetFlagStatus(USART2, USART_FLAG_RXNE);
      Tx_status = USART_GetFlagStatus(USART2, USART_FLAG_TC);

       //     
	  
      if(RX_status == SET)
	  {
              flag = 1;
	   //    
	     Rxbuf[index_rev] = USART_ReceiveData(USART2);
	    index_rev = index_rev + 1;
	    if(index_rev == 20)
	       index_rev = 0;
	  }

}

이상 의 프로그램, 컴 파일, 칩 에 다운로드, 실행, 슈퍼 단말기 에 포트 율, 자릿수 등 을 설정 하면 Welcome to my STM 32 를 볼 수 있 습 니 다! I'm idiot!

좋은 웹페이지 즐겨찾기