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

STM32一文通(8) 串口通訊

發(fā)布者:Quail最新更新時(shí)間:2025-01-14 來(lái)源: jianshu關(guān)鍵字:STM32  串口通訊  PC通訊 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章


// USART GPIO 引腳宏定義

#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOB)

#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

    

#define  DEBUG_USART_TX_GPIO_PORT       GPIOB   

#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_10

#define  DEBUG_USART_RX_GPIO_PORT       GPIOB

#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11


#define  DEBUG_USART_IRQ                USART3_IRQn

#define  DEBUG_USART_IRQHandler         USART3_IRQHandler


#elif DEBUG_USART4

//串口4-UART4

#define  DEBUG_USARTx                   UART4

#define  DEBUG_USART_CLK                RCC_APB1Periph_UART4

#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd

#define  DEBUG_USART_BAUDRATE           115200


// USART GPIO 引腳宏定義

#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC)

#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

    

#define  DEBUG_USART_TX_GPIO_PORT       GPIOC   

#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_10

#define  DEBUG_USART_RX_GPIO_PORT       GPIOC

#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_11


#define  DEBUG_USART_IRQ                UART4_IRQn

#define  DEBUG_USART_IRQHandler         UART4_IRQHandler


#elif DEBUG_USART5

//串口5-UART5

#define  DEBUG_USARTx                   UART5

#define  DEBUG_USART_CLK                RCC_APB1Periph_UART5

#define  DEBUG_USART_APBxClkCmd         RCC_APB1PeriphClockCmd

#define  DEBUG_USART_BAUDRATE           115200


// USART GPIO 引腳宏定義

#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD)

#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

    

#define  DEBUG_USART_TX_GPIO_PORT       GPIOC   

#define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_12

#define  DEBUG_USART_RX_GPIO_PORT       GPIOD

#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_2


#define  DEBUG_USART_IRQ                UART5_IRQn

#define  DEBUG_USART_IRQHandler         UART5_IRQHandler


#endif


void USART_Config(void);

void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data);

void Usart_SendHalfWord(USART_TypeDef* pUSARTx, uint16_t data);

void Usart_SendArray(USART_TypeDef* pUSARTx, uint8_t *array,uint8_t num);

void Usart_SendStr(USART_TypeDef* pUSARTx, char *str);

#endif  /* __BSP_USART_H */


psb_usart.c

#include 'psb_usart.h'

static void NVIC_Config(void)

{

    NVIC_InitTypeDef NVIC_InitStruct;//中斷初始化結(jié)構(gòu)體

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//先設(shè)組

    NVIC_InitStruct.NVIC_IRQChannel = DEBUG_USART_IRQ;//中斷源

    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//主優(yōu)先級(jí)

    NVIC_InitStruct.NVIC_IRQChannelSubPriority=7;//從優(yōu)先級(jí)

    NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE; //中斷使能

    

    NVIC_Init(&NVIC_InitStruct); //中斷初始化

}

void USART_Config(void)

{

    //0.變量定義區(qū)

    GPIO_InitTypeDef GPIO_InitStructure; //創(chuàng)建一個(gè)GPIO_InitTypeDef類型的數(shù)據(jù)

    USART_InitTypeDef USART_InitStruct;//串口初始化結(jié)構(gòu)體

    

    //1.配置GPIO

    DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE); //開啟時(shí)鐘

    

    // 將USART Tx的GPIO配置為推挽復(fù)用模式

    GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);


  // 將USART Rx的GPIO配置為浮空輸入模式

    GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);

    

    //2.初始化串口

    DEBUG_USART_APBxClkCmd(RCC_APB2Periph_USART1,ENABLE);

    

    USART_InitStruct.USART_BaudRate = DEBUG_USART_BAUDRATE; //波特率

    USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8位數(shù)據(jù)為

    USART_InitStruct.USART_StopBits = USART_StopBits_1; //停止位1

    USART_InitStruct.USART_Parity = USART_Parity_No;  //無(wú)奇偶校驗(yàn)

    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //發(fā)送接收都使能

    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //無(wú)硬件流 

    

    USART_Init(USART1, &USART_InitStruct);//初始化串口

    

    //3.中斷配置

    NVIC_Config();

    // 使能串口接收中斷

    USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);    

    

    //4. 使能串口

    USART_Cmd(DEBUG_USARTx, ENABLE);

    

}

/*----------------------------------------------------------------------*/

//5. 編寫發(fā)送函數(shù)


//發(fā)送一個(gè)字節(jié)

void Usart_SendByte(USART_TypeDef* USARTx,uint8_t data)

{

    USART_SendData(USARTx, data);

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

}

//發(fā)送兩個(gè)字節(jié)

void Usart_SendHalfWord(USART_TypeDef* USARTx,uint16_t data)

{

    uint8_t tempH, tempL;

    tempL =  data & 0xFF;

    tempH =  (data>>8) & 0xFF;

    Usart_SendByte(USARTx,tempH);

    Usart_SendByte(USARTx,tempL);

}

//發(fā)送一個(gè)數(shù)組

void Usart_SendArray(USART_TypeDef* USARTx,uint8_t *array, uint8_t num)

{

    uint8_t i;

    for(i=0;i    {

        Usart_SendByte(USARTx,*array++);

    }

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

}

//發(fā)送一個(gè)字符串

void Usart_SendStr(USART_TypeDef* pUSARTx, char *str)

{

    uint8_t i=0;

    do

  {

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

        i++;

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