国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

stm32固件庫UART操作

發(fā)布者:iota19最新更新時間:2025-01-14 來源: jianshu關鍵字:stm32  固件庫  UART操作 手機看文章 掃描二維碼
隨時隨地手機看文章

來源: 野火<零死角玩轉STM32-F407>  407USART2—USART2接發(fā)

//中斷 _it.c

extern uint8_t Rxflag;

extern uint8_t ucTemp;

void RS232_USART_IRQHandler(void)

{

    if(USART_GetITStatus( RS232_USART, USART_IT_RXNE ) != RESET)

    {       

      Rxflag=1;     

        ucTemp = USART_ReceiveData( RS232_USART );

    } 

     

}   


====================

//引腳定義

/*******************************************************/

#define RS232_USART                             USART2

#define RS232_USART_CLK                         RCC_APB1Periph_USART2


#define RS232_USART_RX_GPIO_PORT                GPIOA

#define RS232_USART_RX_GPIO_CLK                 RCC_AHB1Periph_GPIOA

#define RS232_USART_RX_PIN                      GPIO_Pin_3

#define RS232_USART_RX_AF                       GPIO_AF_USART2

#define RS232_USART_RX_SOURCE                   GPIO_PinSource3


#define RS232_USART_TX_GPIO_PORT                GPIOA

#define RS232_USART_TX_GPIO_CLK                 RCC_AHB1Periph_GPIOA

#define RS232_USART_TX_PIN                      GPIO_Pin_2

#define RS232_USART_TX_AF                       GPIO_AF_USART2

#define RS232_USART_TX_SOURCE                   GPIO_PinSource2



#define RS232_USART_IRQHandler                   USART2_IRQHandler

#define RS232_USART_IRQ                                     USART2_IRQn

/************************************************************/



//串口波特率

#define RS232_USART_BAUDRATE                    115200      //25M晶體   在8M上面實際波特率38400 可以(實際36864)   



==========================

/**

  * @brief  配置嵌套向量中斷控制器NVIC

  * @param  無

  * @retval 無

  */

static void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  

  /* Configure one bit for preemption priority */

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  

  /* 配置中斷源 */

  NVIC_InitStructure.NVIC_IRQChannel = RS232_USART_IRQ;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

  

}



 /**

  * @brief  RS232_USART GPIO 配置,工作模式配置。115200 8-N-1 ,中斷接收模式

  * @param  無

  * @retval 無

  */

void Debug_USART_Config(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

        

  RCC_AHB1PeriphClockCmd( RS232_USART_RX_GPIO_CLK|RS232_USART_TX_GPIO_CLK, ENABLE);


  /* 使能 UART 時鐘 */

  RCC_APB1PeriphClockCmd(RS232_USART_CLK, ENABLE);

  

  /* 連接 PXx 到 USARTx_Tx*/

  GPIO_PinAFConfig(RS232_USART_RX_GPIO_PORT,RS232_USART_RX_SOURCE, RS232_USART_RX_AF);


  /*  連接 PXx 到 USARTx__Rx*/

  GPIO_PinAFConfig(RS232_USART_TX_GPIO_PORT,RS232_USART_TX_SOURCE,RS232_USART_TX_AF);


  /* 配置Tx引腳為復用功能  */

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;


  GPIO_InitStructure.GPIO_Pin = RS232_USART_TX_PIN  ;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(RS232_USART_TX_GPIO_PORT, &GPIO_InitStructure);


  /* 配置Rx引腳為復用功能 */

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_Pin = RS232_USART_RX_PIN;

  GPIO_Init(RS232_USART_RX_GPIO_PORT, &GPIO_InitStructure);

            

  /* 配置串口RS232_USART 模式 */

  USART_InitStructure.USART_BaudRate = RS232_USART_BAUDRATE;

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  USART_InitStructure.USART_StopBits = USART_StopBits_1;

  USART_InitStructure.USART_Parity = USART_Parity_No ;

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  USART_Init(RS232_USART, &USART_InitStructure); 

    

    NVIC_Configuration();

    /*配置串口接收中斷*/

    USART_ITConfig(RS232_USART, USART_IT_RXNE, ENABLE);

    

  USART_Cmd(RS232_USART, ENABLE);

}




/*****************  發(fā)送一個字符 **********************/

static void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch )

{

    /* 發(fā)送一個字節(jié)數據到USART1 */

    USART_SendData(pUSARTx,ch);

        

    /* 等待發(fā)送完畢 */

    while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);  

}

/*****************  指定長度的發(fā)送字符串 **********************/

void Usart_SendStr_length( USART_TypeDef * pUSARTx, uint8_t *str,uint32_t strlen )

{

    unsigned int k=0;

    do 

    {

        Usart_SendByte( pUSARTx, *(str + k) );

        k++;

    } while(k < strlen);

}


/*****************  發(fā)送字符串 **********************/

void Usart_SendString( USART_TypeDef * pUSARTx, uint8_t *str)

{

    unsigned int k=0;

    do 

    {

        Usart_SendByte( pUSARTx, *(str + k) );

        k++;

    } while(*(str + k)!='