zoukankan      html  css  js  c++  java
  • 102-CH579M学习开发-基本外设-串口

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnCH579M" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

    说明

    单片机共有4个串口

    开发板上连接的是串口1

    在中断函数里面接收数据,并返回接收的数据

    int main()
    {
        /*ÅäÖô®¿Ú1*/
        GPIOA_SetBits(GPIO_Pin_9);
        GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);     // RXD-ÅäÖÃÉÏÀ­ÊäÈë
        GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);// TXD-ÅäÖÃÍÆÍìÊä³ö£¬×¢ÒâÏÈÈÃIO¿ÚÊä³ö¸ßµçƽ
        UART1_DefInit();
        /*ʹÄܽÓÊÕÖжÏ,½ÓÊÕ´íÎóÖжÏ*/
        UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );
    //    NVIC_SetPriority(TMR0_IRQn,18);//ÉèÖÃÖжÏÓÅÏȼ¶(Ò²¿ÉÒÔ²»ÉèÖÃ,ĬÈÏ14)
        NVIC_EnableIRQ( UART1_IRQn );
        
        while(1)
        {
        }
    }
    /*´®¿ÚÖжÏ*/
    void UART1_IRQHandler(void)
    {
        char data;
        switch( UART1_GetITFlag() )
        {
            case UART_II_LINE_STAT:          // Ïß·״̬´íÎó
                    UART1_GetLinSTA();
                    break;
            case UART_II_RECV_RDY:          // Êý¾Ý´ïµ½ÉèÖô¥·¢µã
                    data = UART1_RecvByte();
                    UART1_SendByte(data);
                    break;
            case UART_II_RECV_TOUT:         // ½ÓÊÕ³¬Ê±£¬ÔÝʱһ֡Êý¾Ý½ÓÊÕÍê³É
                    data = UART1_RecvByte();
                    UART1_SendByte(data);
                    UART1_SendByte('b');//´òÓ¡Ò»¸ö×Ö·û,˵Ã÷½øÈëÁ˴˺¯Êý
                    break;
            case UART_II_THR_EMPTY:         // ·¢ËÍ»º´æÇø¿Õ£¬¿É¼ÌÐø·¢ËÍ
                    break;
            case UART_II_MODEM_CHG:         // Ö»Ö§³Ö´®¿Ú0
                    break;
            default:
                    break;
        }
    }

    注意:需要修改下官方的UART1_DefInit();函数

     

    注意:接收数据的最后一个字节是在空闲中断事件里面读取

    空闲中断默认的时间

    使用中断发送数据

    char send_len = 0;
    char send_buff[11]="987654321
    
    ";
    int main()
    {
        /*ÅäÖô®¿Ú1*/
        GPIOA_SetBits(GPIO_Pin_9);
        GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);     // RXD-ÅäÖÃÉÏÀ­ÊäÈë
        GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);// TXD-ÅäÖÃÍÆÍìÊä³ö£¬×¢ÒâÏÈÈÃIO¿ÚÊä³ö¸ßµçƽ
        UART1_DefInit();
        /*ʹÄܽÓÊÕÖжÏ,½ÓÊÕ´íÎóÖжÏ*/
        UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );
    //    NVIC_SetPriority(TMR0_IRQn,18);//ÉèÖÃÖжÏÓÅÏȼ¶(Ò²¿ÉÒÔ²»ÉèÖÃ,ĬÈÏ14)
        NVIC_EnableIRQ( UART1_IRQn );
        
        while(1)
        {
            send_len = 11;
            UART1_INTCfg( ENABLE,RB_IER_THR_EMPTY );//ʹÄÜÖжϷ¢ËÍ
            DelayMs(1000);
        }
    }
    /*´®¿ÚÖжÏ*/
    void UART1_IRQHandler(void)
    {
        char data;
        switch( UART1_GetITFlag() )
        {
            case UART_II_LINE_STAT:          // Ïß·״̬´íÎó
                    UART1_GetLinSTA();
                    break;
            case UART_II_RECV_RDY:          // Êý¾Ý´ïµ½ÉèÖô¥·¢µã
                    data = UART1_RecvByte();
                    break;
            case UART_II_RECV_TOUT:         // ½ÓÊÕ³¬Ê±£¬ÔÝʱһ֡Êý¾Ý½ÓÊÕÍê³É
                    data = UART1_RecvByte();
                    break;
            case UART_II_THR_EMPTY:         // ·¢ËÍ»º´æÇø¿Õ£¬¿É¼ÌÐø·¢ËÍ
                    if(send_len>0)
                    {
                        send_len--;
                        UART1_SendByte(send_buff[send_len]);
                    }
                    else
                    {
                        UART1_INTCfg( DISABLE,RB_IER_THR_EMPTY );//¹Ø±ÕÖжϷ¢ËÍ
                    }
                    
                    break;
            case UART_II_MODEM_CHG:         // Ö»Ö§³Ö´®¿Ú0
                    break;
            default:
                    break;
        }
    }
  • 相关阅读:
    sqlplus时报Linux-x86_64 Error: 13: Permission denied
    thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 合并石子
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/15034192.html
Copyright © 2011-2022 走看看