OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3206|回复: 7

请问为什么我串口发送数据它不会进入中断呢

[复制链接]

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2017-5-1
在线时间
25 小时
发表于 2017-5-3 17:19:45 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void MP3Con(unsigned char n)
{
        int i;
        unsigned int MP3play[5] = {0xfd,0x02,0x01,0xdf};
        unsigned int MP3plause[5]= {0xfd,0x02,0x02,0xdf};
        if(1==n)
        {
                for(i=0;i<4;i++)
                {
                        USART_SendData(USART2,MP3play);
                        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
                               
                }
        }
        if(2==n)
        {
                for(i=0;i<4;i++)
                {
                  USART_SendData(USART2,MP3plause);
                  while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
                }
        }
}[/mw_shl_code]
这是发送数据的函数,1和2分别对应两种控制mp3的.
[mw_shl_code=c,true]void USART2_IRQHandler(void)  
{  
  //u8 RX_dat;  
   
  if(USART_GetITStatus(USART2,USART_IT_TXE)==SET)//USART_IT_RXNE:
  {   
    USART_ClearITPendingBit(USART2,USART_IT_TXE);  
   // RX_dat=USART_ReceiveData(USART2);
    //USART_SendData(USART2,RX_dat);     
    while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET)
                  {
                                LED1_ONOFF(Bit_RESET);
                                Delay_ms(1000);
                                LED1_ONOFF(Bit_SET);
                                Delay_ms(1000);
                        }  //
    GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);  
  }     
}  [/mw_shl_code]
这个是中断函数,我用led的闪烁来判断是否进入了中断,可是好像没有进入,然后用逻辑分析仪检测TXD口发现有信号传输~~
[mw_shl_code=c,true]  while(1)
  {       
                MP3Con(1);
                LED1_ONOFF(Bit_RESET);
                Delay_ms(1000);
                MP3Con(2);
                LED1_ONOFF(Bit_SET);
                Delay_ms(1000);
  }                [/mw_shl_code]
这是主函数里面发送数据的部分

有信号发送的话配置应该没问题吧,可是mp3好像并没有受控制,它的协议就是发MP3Con(1) 过去就开始播放,然后我发现中断函数没有调用,但是 程序又没有卡住,能执行下去(因为while(发送完成)),
才学这个没多久,求大神帮帮我,看一下问题出在哪,谢谢了

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2017-5-1
在线时间
25 小时
 楼主| 发表于 2017-5-3 18:24:27 | 显示全部楼层
对了,TXD口有信号,但是好像没有发送成功,只是有一个下降的跳变,然后马上跳会高电平,这是怎么回事呢
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12224
金钱
12224
注册时间
2013-3-8
在线时间
1297 小时
发表于 2017-5-3 20:27:00 | 显示全部楼层
没看到你在哪儿开发送中断了
回复

使用道具 举报

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2017-5-1
在线时间
25 小时
 楼主| 发表于 2017-5-3 22:35:24 | 显示全部楼层
augustedward 发表于 2017-5-3 20:27
没看到你在哪儿开发送中断了

我在那个USART的配置里面开了,没贴出来
回复

使用道具 举报

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2017-5-1
在线时间
25 小时
 楼主| 发表于 2017-5-3 22:36:05 | 显示全部楼层
void USART2_Config(void)
{
        //3&#245;ê&#188;&#187;ˉ&#189;á11ì&#229;éù&#195;÷
        GPIO_InitTypeDef GPIO_InitStruct;
        USART_InitTypeDef USART_InitStruct;
        NVIC_InitTypeDef NVIC_InitStructure;   
       
        //íaéèê±&#214;ó&#191;a&#198;&#244;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 ,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
       
        //USART2-TX  &#197;&#228;&#214;&#195;
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStruct);
       
        //USART-RX  &#197;&#228;&#214;&#195;
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStruct);
       
         
  //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   
  
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;   
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;   
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   
  NVIC_Init(&NVIC_InitStructure);   
       
        //USART2 mode config
        USART_InitStruct.USART_BaudRate = 9600;     //2¨ì&#216;&#194;ê
        USART_InitStruct.USART_WordLength = USART_WordLength_8b;   //êy&#190;Y×&#214;3¤
        USART_InitStruct.USART_StopBits = USART_StopBits_1;   //í£&#214;1&#206;&#187;
        USART_InitStruct.USART_Parity = USART_Parity_No;   //&#198;&#230;&#197;&#188;D£&#209;é
        USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ó2&#188;t&#191;&#216;á÷&#191;&#216;&#214;&#198;
        USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //′&#174;&#191;ú&#196;£ê&#189;&#197;&#228;&#214;&#195;,è&#171;&#203;&#171;1¤,&#182;&#188;&#191;a&#198;&#244;
       
        //USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#189;óêü&#214;D&#182;&#207;
        USART_ITConfig(USART2, USART_IT_TXE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú·¢&#203;í&#214;D&#182;&#207;
        USART_Init(USART2,&USART_InitStruct);
        USART_Cmd(USART2,ENABLE);
       

}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-4 22:36:49 | 显示全部楼层
重复贴
回复

使用道具 举报

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2017-5-1
在线时间
25 小时
 楼主| 发表于 2017-5-4 22:44:48 | 显示全部楼层

  额,贴什么
回复

使用道具 举报

13

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2017-5-1
在线时间
25 小时
 楼主| 发表于 2017-5-4 22:48:16 | 显示全部楼层

哦哦,懂了,萌新~~~不要介意哈,我去看看
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 16:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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