美文网首页
灵动微MM32F003硬件最小系统 --- 串口中断服务程序发送

灵动微MM32F003硬件最小系统 --- 串口中断服务程序发送

作者: 黄开通 | 来源:发表于2020-11-27 11:17 被阅读0次

    本例程为中断服务程序收发定长数据。

    1 中断服务程序

    void UART2_IRQHandler(void)
    {
        UART_TypeDef* UARTx = UART2;
        u8 temp;
    
    // Receive packet
        if (UART_GetITStatus(UARTx, UART_IT_RXIEN) != RESET) {
            UART_ClearITPendingBit(UARTx, UART_IT_RXIEN);
            temp = UART_ReceiveData(UARTx);
            vtemp[vNo++] = temp;
    
            if ((vUART2RxProcess.Cnt) > 0) {
                *(u8*)(vUART2RxProcess.Ptr) = temp;
                vUART2RxProcess.Ptr++;
                vUART2RxProcess.Cnt--;
                if ((vUART2RxProcess.Cnt) == 0) {
                    vUART2RxProcess.Complete = TRUE;
                    UART_ITConfig(UARTx, UART_IT_RXIEN, DISABLE);
    //                if (vUART2RxProcess.sync == emType_Sync) {
    //                    funcptr fun = (funcptr)(vUART2RxProcess.syncRx);
    //                   (*fun)();
    //                }
                }
    
            }
    
        }
    // Send packet
        if (UART_GetITStatus(UARTx, UART_IT_TXIEN) != RESET) {
            UART_ClearITPendingBit(UARTx, UART_IT_TXIEN);
    
            if (vUART2TxProcess.Cnt > 0) {
                UART_SendData(UARTx, *(u8*)(vUART2TxProcess.Ptr));
                vUART2TxProcess.Ptr++;
                vUART2TxProcess.Cnt--;
            } else {
                UART_ITConfig(UARTx, UART_IT_TXIEN, DISABLE);
                while (!UART_GetFlagStatus(UARTx, UART_CSR_TXC));
                vUART2TxProcess.Complete = TRUE;
    //          if (vUART2TxProcess.sync == emType_Sync) {
    //              funcptr fun = (funcptr)(vUART2TxProcess.syncfun);
    //             (*fun)();
    //          }
            }
    
        }
    }
    

    2 main主程序流程

    int main(void)
    {
        int ret;
        InitSystick();
    
        Uart_ConfigInit(9600);
    //    UART2_WriteBuf((u8*)printBuf, sprintf(printBuf,"sprintf ok\r\n"));
        UartSendGroup((u8*)printBuf, sprintf(printBuf, "sprintf ok\r\n"));          //pintf stdio data
        UartSendAscii("UartSendAscii\r\n");                                         //printf string
        UartSendAscii("Please input data ,end with '\\n' \r\n");
    
        while(1) {
            // delay(1000);
    
            ret = UART2_ReadBuf(RxBuf, 10);
            if(ret == 1) {
                memcpy(TxBuf, RxBuf, 10);
                UART2_WriteBuf(TxBuf, 10);
            }
        }
    
    }
    

    官方例程的修正已基本完成,需要程序的同学可以到百度网盘下载。
    提取码:0o5i

    相关文章

      网友评论

          本文标题:灵动微MM32F003硬件最小系统 --- 串口中断服务程序发送

          本文链接:https://www.haomeiwen.com/subject/crqxwktx.html