新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32串口通訊USART

        STM32串口通訊USART

        作者: 時間:2016-11-27 來源:網絡 收藏


        void UART1_Configuration(void)
        {

        USART_InitTypeDef USART_InitStructure;

        USART_InitStructure.USART_BaudRate = 9600;
        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(USART1, &USART_InitStructure);


        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);



        USART_Cmd(USART1, ENABLE);
        }

        發送一個字符

        u8 Uart1_PutChar(u8 ch)
        {

        USART_SendData(USART1, (u8) ch);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
        {
        }
        return ch;
        }


        發送一個字符串

        void Uart1_PutString(u8* buf , u8 len)
        {
        for(u8 i=0;i{
        Uart1_PutChar(*buf++);
        }
        }

        如果UART使用中斷發送數據 則需要修改stm32f10x_it.c 中的串口中斷函數 并且需要修改void NVIC_Configuration(void)函數

        在中斷里面的處理 原則上是需要簡短和高效 下面的流程是 如果接收到255個字符或者接收到回車符 則關閉中斷 并且把標志位UartHaveData 置1


        void USART1_IRQHandler(void)
        {
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {

        RxBuffer[ RxCounter ] = USART_ReceiveData(USART1);
        if( RxCounter == 0xfe || == RxBuffer[ RxCounter ] )
        {

        USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
        RxBuffer[ RxCounter ] =

        主站蜘蛛池模板: 黄浦区| 金华市| 呼图壁县| 托克逊县| 宣威市| 长治县| 濉溪县| 孝昌县| 黎城县| 报价| 定兴县| 克什克腾旗| 湄潭县| 孝昌县| 涟源市| 抚远县| 凤城市| 司法| 高平市| 广南县| 遂平县| 阜宁县| 和静县| 镇远县| 溧水县| 合阳县| 滨海县| 年辖:市辖区| 蓝山县| 朝阳县| 远安县| 墨玉县| 扬州市| 高密市| 武宣县| 海丰县| 宜良县| 洪雅县| 井研县| 四会市| 白玉县|