问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F303RCT6 USART0的空闲中断进不去,仿真打断点也进不去中断

单片机 USART 空闲中断 GD32F303RCT6 仿真 ma

GD32F303RCT6 USART0的空闲中断进不去,仿真打断点也进不去中断

tianlan飞机2024-11-06
int main(void)
{  //¿ÉÒÔ×öµ½´«ÊäÊý¾Ý³öÀ´£¬¶¨µã´«ÊäÊý¾Ý³öÀ´
        uint32_t  Status2 =0;
        uint32_t  Status3;
        uint16_t  x;
        dma_parameter_struct dma_init_struct2;
    gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);    //ÏÂÔØ¿ÚNJTRSTÒý½Åµ±×öÆÕͨI/O¿Ú
          rcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1);  
          systick_config();            //1ms systick
          gpio_config();               //PA1,PA2,PA3¹Ü½ÅÅäÖÃ
        /************************************************/
                //UART0_init
                rcu_periph_clock_enable(RCU_AF);//Need!!!!
          //usart_halfduplex_enable(USART0);
                rcu_periph_clock_enable(RCU_USART0); //ʹÄÜUSART0ʱÖÓ
                gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);
    usart_deinit(USART0);    //³õʼ»¯    //¸´Î»Ê±ÖÓ
    usart_baudrate_set(USART0, 19200U);   //¶¨Ò岨ÌØÂÊ
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);    //½ÓÊÕʹÄÜ  
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);  //·¢ËÍʹÄÜ               

                usart_interrupt_enable(USART0, USART_INT_TC);    //·¢ËÍÍê³ÉÖжÏ
                usart_interrupt_enable(USART0, USART_INT_IDLE);  //¿ÕÏÐÖжÏ
    usart_enable(USART0);    //Ä£¿éʹÄÜ   USART_INT_TC
                nvic_irq_enable(USART0_IRQn, 0, 1);
                RX0_DMAquest_StartOrInit();

                TX0_DMAquest_StartOrInit();
                usart_dma_receive_config(USART0, USART_DENR_ENABLE);
                usart_dma_transmit_config(USART0, USART_DENT_ENABLE);

          //NVICEXTI_config();
//                timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_CH0);
//                timer_interrupt_enable(TIMER0, TIMER_INT_CH0);
//                usart_dma_transmit_config(USART0, USART_DENT_ENABLE);
//    usart_dma_receive_config(USART0, USART_DENR_ENABLE);
                /******************************************************/

                                /* configure DMA mode */
//                                dma_circulation_disable(DMA1, DMA_CH4);        //²»Ñ­»·

        rcu_periph_clock_enable(RCU_CRC);
        gpio_bit_set(GPIOB, GPIO_PIN_5);
        dma_parameter_struct dma_init_struct;
        while(1)
        {               
//                        if(++Tx_Delay >= 0x300)
//                        {
//                                Tx_Delay=0;
//        usart_dma_transmit_config(UART3, USART_DENT_DISABLE);
//                                dma_channel_disable(DMA1, DMA_CH2);   //¹Ø±ÕRx
//                                dma_channel_enable(DMA1, DMA_CH2);       
//                                usart_dma_transmit_config(UART3, USART_DENT_ENABLE);

                                //6E 32 2E 76 61 6C 3D 31 32 33 ff ff ff
                                delay_1ms(500);
                                if(rxflag)
                                {
                                                rxflag=0;       
                                                dma_parameter_struct dma_init_struct;
                                                rcu_periph_clock_enable(RCU_DMA0);             //¿ªÊ±ÖÓ
                                                dma_deinit(DMA0, DMA_CH3);                     //³õʼ»¯Í¨µÀ3
                                                dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;        //ÄÚ´æµ½ÍâÉè
                                                dma_init_struct.memory_addr = (uint32_t)&MyBuffRxUart3[0];  //¶¨Ò建³åÇøhostMainControl  Uart3transmitt_buff
                                                dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;     //
                                                dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;        //8λλ¿í
                                                dma_init_struct.number = 20;//ARRAYNUM(transmitter_buffer);  //ÕâÀïÊÇ·¢ËÍÊý¾ÝµÄÊýÁ¿
                                                dma_init_struct.periph_addr = ((uint32_t)0x40013804);           //´®¿ÚµØÖ·
                                                dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;    //¶¨¼Ä´æÆ÷
                                                dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;    //8λλ¿í
                                                dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;          //×î¸ßÓÅÏȼ¶
                                                dma_init(DMA0, DMA_CH3, &dma_init_struct);
                                                dma_circulation_disable(DMA0, DMA_CH3);
                                                dma_channel_enable(DMA0, DMA_CH3);
                                               
                                }




中断如下:


extern void RX0_DMAquest_StartOrInit(void);
extern uint8_t rxflag;
extern dma_parameter_struct dma_data_parameter;
void USART0_IRQHandler(void)
{
         uint32_t clear;
                if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TC))   //·¢ËÍcomplete±ê־λΪ1
                {          /* transmit data */
        usart_flag_clear(USART0, USART_FLAG_TC);
                                dma_channel_disable(DMA0, DMA_CH3);
                          
//                                usart_interrupt_enable(USART0, USART_INT_IDLE);  //¿ÕÏÐÖжÏ
//                                usart_interrupt_disable(USART0, USART_INT_TC);    //·¢ËÍÍê³ÉÖжÏ
                        dma_channel_enable(DMA0, DMA_CH3);
        gpio_bit_reset(GPIOB, GPIO_PIN_5);    //µãÁÁLED               
    }
               
         if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_IDLE))   //·¢ËÍnuLL±ê־λΪ1
                {  
                                dma_channel_disable(DMA0, DMA_CH4);
                          clear= USART_STAT0(USART0);
                          clear = USART_DATA(USART0);
                                usart_receive_config(USART0, USART_RECEIVE_ENABLE);    //½ÓÊÕʹÄÜ
                                usart_dma_receive_config(USART0, USART_DENR_ENABLE);
                                RX0_DMAquest_StartOrInit();                 
                                dma_channel_enable(DMA0, DMA_CH4);
//                                usart_interrupt_disable(USART0, USART_INT_IDLE);  //¿ÕÏÐÖжÏ
//                                usart_interrupt_enable(USART0, USART_INT_TC);    //·¢ËÍÍê³ÉÖжÏ
                          rxflag=1;
    }
               
}

回答 +关注 0
1263人浏览 10人回答问题 分享 举报
10 个回答
12下一页

您需要登录后才可以回复 登录 | 注册