硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5390|回复: 1
收起左侧

[有问必答] stm32f407IGT的USART6中断发送和中断接收,示波器观察发送管脚没有数据出去;同时接

[复制链接]

13

主题

56

回帖

95

积分

初级会员

积分
95
发表于 2016-10-11 16:26:05 | 显示全部楼层 |阅读模式
   请教版主:

          我在板子上进行实验,验证USART1-----USART6。
         其中 USART1、USART2、USART3、UART4、UART5 上述5个串口程序都调试通过,目前就是USART6串口调试不通过,请教是什么原因,难道USART6有特殊的地方吗?

        1、  我的USART6程序架构为:
              (1)、主程序定时每隔100ms发送10个字节
              (2)、 在主程序发送第1个字节,然后开启发送中断使能,
              (3)、其余9个字节的数据在【发送中断】中发送,发送完毕,关闭【发送中断】。      

      2、 错误现象为:
               (1)、进入断点追踪,要进入 【发送中断】,但是用示波器观察发送管脚没有数据出去
               (2)、把TX和RX管脚短接,进入断点追踪,从来都不会进入接收中断


     3、USART6初始化程序


void USART6_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);        //for USART1 and USART6
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

    GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);
    GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6);         
    // Configure USART6 Tx (PC.06) as alternate function push-pull
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);   

    // Configure USART6 Rx (PC.07) as input floating
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_Init(GPIOC, &GPIO_InitStructure);   

    USART_InitStructure.USART_BaudRate = 57600;
    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(USART6, &USART_InitStructure);
    USART_Cmd(USART6, ENABLE);

    //CPU的小缺陷:串口配置好,如果直接Send,则第1个字节发送不出去如下语句解决第1个字节无法正确发送出去的问题
    USART_ClearFlag(USART6, USART_FLAG_TC);                     //清发送完成标志,Transmission Complete flag  
    USART_ITConfig(USART6, USART_IT_RXNE, ENABLE);
}


    4、USART6发送和接收中断服务程序


void USART6_IRQHandler(void)
{
    uint8_t ch;


    if (USART_GetITStatus(USART6, USART_IT_RXNE) != RESET)
    {     
        USART_ClearITPendingBit(USART6, USART_IT_RXNE);
        ch = USART6->DR;
        if (USART6_receCount < MSCOMM_BUFFER_LENGTH)
            USART6_mscomm_buffer[USART6_receCount++] = ch;
        else
            USART6_receCount = 0;
    }

    else if (USART_GetITStatus(USART6, USART_IT_TC) != RESET)
    {  
        USART_ClearITPendingBit(USART6, USART_IT_TC);
        if (USART6_sendPosi < USART6_sendCount)
            USART_SendData(USART6, USART6_send_buffer[USART6_sendPosi++]);
        else
        {               
            USART_ITConfig(USART6, USART_IT_TC, DISABLE);                        
        }
    }
}


      5、中断优先级初始化

void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//嵌套优先级分组为 4

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;     
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);        

    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;     
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;     
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);   

    NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;     
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);        

    NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;     
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);        

    NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn;     
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);   
}
我是新手,请多多关照。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2016-10-12 10:09:21 | 显示全部楼层
这个没有什么要特别注意的,我们V5板子的GPRS用的就是这个接口。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 17:32 , Processed in 0.040114 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表