打印
[开发生态]

N32G430K8Q7无法进入串口接收中断且程序无法运行

[复制链接]
847|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hj19910310|  楼主 | 2022-8-12 22:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、无法进入串口接收中断。根据lib中的例程,对串口进行了配置,如下:
void GPIO_Configuration(void)
{
    GPIO_InitType GPIO_InitStructure;

    //TX
    GPIO_Structure_Initialize(&GPIO_InitStructure);
    GPIO_InitStructure.Pin            = GPIO_PIN_2;
    GPIO_InitStructure.GPIO_Mode      = GPIO_MODE_AF_PP;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF5_USART2;
    GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);
//RX
    GPIO_InitStructure.Pin             = GPIO_PIN_3;
    GPIO_InitStructure.GPIO_Alternate  = GPIO_AF5_USART2;
    GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);
}

void RCC_Configuration(void)
{
    /* Enable GPIO clock */
    RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOA );
    /* Enable USARTy and USARTz Clock */
    RCC_APB1_Peripheral_Clock_Enable(RCC_APB1_PERIPH_USART2);
}

void NVIC_Configuration(void)
{
    NVIC_InitType NVIC_InitStructure;

    /* Enable the USARTy Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel                   = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Initializes(&NVIC_InitStructure);

}

void uart_init(void)
{

    USART_InitType USART_InitStructure;

    RCC_Configuration();
    NVIC_Configuration();
    GPIO_Configuration();

    USART_InitStructure.BaudRate            = 115200;
    USART_InitStructure.WordLength          = USART_WL_8B;
    USART_InitStructure.StopBits            = USART_STPB_1;
    USART_InitStructure.Parity              = USART_PE_NO;
    USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
    USART_InitStructure.Mode                = USART_MODE_RX | USART_MODE_TX;

    /* init uart */
    USART_Initializes(USART2, &USART_InitStructure);

    /* Enable USARTz Receive and Transmit interrupts */
    USART_Interrput_Enable(USART2, USART_INT_RXDNE);
//    USART_Interrput_Enable(USART2, USART_INT_TXDE);

    /* enable uart */
    USART_Enable(USART2);
}

中断程序如下:
void USART2_IRQHandler(void)
{
    if (USART_Interrupt_Status_Get(USART2, USART_INT_RXDNE) != RESET)
    {
        /* Read one byte from the receive data register */
        USART_Interrupt_Status_Clear(USART2, USART_INT_RXDNE);
//        recv_data = USART_Data_Receive(USART2);
//        RingBuffer_Write((uint8_t *)&recv_data, 2);
        USART_Data_Send(USART2,  USART_Data_Receive(USART2));
        LED1_OFF;
        if(recv_data == 0x11)
        {
            LED1_ON;
        }
    }
}

程序在正常运行的时候,可以正常发送数据,但是进不了串口接收中断。

2、多次下载后,程序无法正常运行。现象是:我在main函数中写了闪灯程序,正常运行的时候,会闪烁。但是多次下载后,就没闪灯了,而且没有串口日志打印,因此判断程序未正常运行。然后debug调试的时候,可以正常运行main函数中的程序,同样无法进入串口接收中断。复位后,板子依然是无法运行程序的状态。

以上是遇到的两个问题,请各位大佬指点指点,或者帮忙分析分析。


使用特权

评论回复
沙发
hj19910310|  楼主 | 2022-8-12 23:15 | 只看该作者
在debug的时候,程序是从这里开始的,如图。只有一步一步的点step over才能是程序运行起来,直接点run的话,点一次的话也是显示在程序开始的位置,多次点击run后,会直接开始运行了。


微信图片_20220812231539.png (396.86 KB )

微信图片_20220812231539.png

使用特权

评论回复
板凳
蜗牛的房子| | 2022-8-15 11:06 | 只看该作者
本帖最后由 蜗牛的房子 于 2022-8-15 11:09 编辑

按你的这个配置,debug跑起来可以进串口的中断。如果还有问题,也可以加入国民技术交流qun 交流一下

main.zip

2.99 KB

使用特权

评论回复
地板
sy12138| | 2022-8-15 14:02 | 只看该作者
软件配置没看出什么问题,看看是不是其他地方的问题

使用特权

评论回复
5
hj19910310|  楼主 | 2022-8-23 21:42 | 只看该作者
蜗牛的房子 发表于 2022-8-15 11:06
按你的这个配置,debug跑起来可以进串口的中断。如果还有问题,也可以加入国民技术交流qun 交流一下{:biggr ...

没找到群啊,我也想群里问问,还是有问题的,我可以在中断里面收什么发什么,但是我用长数组始终没得数据

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝