OpenEdv-开源电子网

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

USART1 IDLE中断数据没有回复

[复制链接]

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2015-11-25
在线时间
21 小时
发表于 2021-7-15 10:05:31 | 显示全部楼层 |阅读模式
1金钱
USART1 自发自收调试,发送一帧数据,不能返回来。好像就没有进入IDLE中断。各位大神帮忙看看怎么回事。
02.png
03.png

最佳答案

查看完整内容[请看2#楼]

谢谢,问题已解决。我一直在仿真用串口发送数据,没有返回值。实际上用硬件跑是正常的。可能是串口仿真哪里有问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2015-11-25
在线时间
21 小时
 楼主| 发表于 2021-7-15 10:05:32 | 显示全部楼层
a1156284 发表于 2021-7-15 14:55
初始化差不多一样的
照你的方式写了个demo试了下,我的板子正常。

谢谢,问题已解决。我一直在仿真用串口发送数据,没有返回值。实际上用硬件跑是正常的。可能是串口仿真哪里有问题。
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8644
金钱
8644
注册时间
2020-5-11
在线时间
4099 小时
发表于 2021-7-15 10:42:37 | 显示全部楼层
自发自收?没看到哪里有主动发送啊?
专治疑难杂症
回复

使用道具 举报

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2015-11-25
在线时间
21 小时
 楼主| 发表于 2021-7-15 10:45:06 | 显示全部楼层
LcwSwust 发表于 2021-7-15 10:42
自发自收?没看到哪里有主动发送啊?

if(USART_IDLE_STA==1)
                {                                          
                        len=USART_RX_STA;                       
                        for(t=0;t<len;t++)
                   { USART_SendData(USART1, USART_RX_BUF[t]);
                           while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                         }       
这个是发送函数       
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3625
金钱
3625
注册时间
2019-8-14
在线时间
1054 小时
发表于 2021-7-15 10:58:39 | 显示全部楼层
可以用串口助手看下单独的收发配置上有没有问题
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8644
金钱
8644
注册时间
2020-5-11
在线时间
4099 小时
发表于 2021-7-15 11:07:11 | 显示全部楼层
lipengliang0335 发表于 2021-7-15 10:45
if(USART_IDLE_STA==1)
                {                                          
                        len=USART_RX_STA;                        

假如一开始USART_FLAG_IDLE为0,那么它必须在收到有数据之后且检测到空闲才会再次置位.
所以你这里不是主动发送,而是在收到数据之后才会发送.
傲游截图20210715110747.jpg
专治疑难杂症
回复

使用道具 举报

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2015-11-25
在线时间
21 小时
 楼主| 发表于 2021-7-15 11:29:37 | 显示全部楼层
LcwSwust 发表于 2021-7-15 11:07
假如一开始USART_FLAG_IDLE为0,那么它必须在收到有数据之后且检测到空闲才会再次置位.
所以你这里不是主 ...

是的,接收到一帧数据完成后发送出去。目前串口接收一帧数据没有发送出去
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8644
金钱
8644
注册时间
2020-5-11
在线时间
4099 小时
发表于 2021-7-15 11:50:57 | 显示全部楼层
lipengliang0335 发表于 2021-7-15 11:29
是的,接收到一帧数据完成后发送出去。目前串口接收一帧数据没有发送出去

那就定时往串口助手发送USART1->SR看是多少.
专治疑难杂症
回复

使用道具 举报

0

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1876
金钱
1876
注册时间
2016-10-23
在线时间
262 小时
发表于 2021-7-15 14:10:00 | 显示全部楼层
先确定USART1_IRQHandler 进的去不,
你的串口好像没配到nvic中断组,可能不会进USART1_IRQHandler
6年嵌入式老玩家 深圳
回复

使用道具 举报

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2015-11-25
在线时间
21 小时
 楼主| 发表于 2021-7-15 14:14:25 | 显示全部楼层
a1156284 发表于 2021-7-15 14:10
先确定USART1_IRQHandler 进的去不,
你的串口好像没配到nvic中断组,可能不会进USART1_IRQHandler

u16 USART_RX_STA=0;       //&#189;óê&#213;×′ì&#172;±ê&#188;&#199;         
u16 USART_IDLE_STA =0;

void uart_init(u32 bound){
  //GPIO&#182;&#203;&#191;úéè&#214;&#195;
  GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);        //ê1&#196;üUSART1£&#172;GPIOAê±&#214;ó
  
        //USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA.9
   
  //USART1_RX          GPIOA.103&#245;ê&#188;&#187;ˉ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//&#184;&#161;&#191;&#213;ê&#228;è&#235;
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOA.10  

  //Usart1 NVIC &#197;&#228;&#214;&#195;
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                //×óó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);        //&#184;ù&#190;Y&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉVIC&#188;&#196;′&#230;&#198;÷
  
   //USART 3&#245;ê&#188;&#187;ˉéè&#214;&#195;

        USART_InitStructure.USART_BaudRate = bound;//′&#174;&#191;ú2¨ì&#216;&#194;ê
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;êy&#190;Y&#184;&#241;ê&#189;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò&#187;&#184;&#246;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_Parity = USART_Parity_No;//&#206;T&#198;&#230;&#197;&#188;D£&#209;é&#206;&#187;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//&#206;Tó2&#188;têy&#190;Yá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ê&#213;·¢&#196;£ê&#189;

  USART_Init(USART1, &USART_InitStructure); //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#189;óêü&#214;D&#182;&#207;
        USART_ITConfig(USART1,USART_IT_IDLE,ENABLE);
        USART1->SR;
        USART1->DR;

  USART_Cmd(USART1, ENABLE);                    //ê1&#196;ü′&#174;&#191;ú1

}


NVIC 配置过了
回复

使用道具 举报

0

主题

130

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1876
金钱
1876
注册时间
2016-10-23
在线时间
262 小时
发表于 2021-7-15 14:55:32 | 显示全部楼层
本帖最后由 a1156284 于 2021-7-15 15:01 编辑

初始化差不多一样的
照你的方式写了个demo试了下,我的板子正常。

rr1.png
rr2.png
RR3.png
6年嵌入式老玩家 深圳
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13100
金钱
13100
注册时间
2012-11-26
在线时间
3811 小时
发表于 2021-7-15 15:00:42 | 显示全部楼层
空闲中断一般配合DMA用的,看你主楼的用法,有点蛋疼
学无止境
回复

使用道具 举报

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2015-11-25
在线时间
21 小时
 楼主| 发表于 2021-7-15 15:21:34 | 显示全部楼层
jermy_z 发表于 2021-7-15 15:00
空闲中断一般配合DMA用的,看你主楼的用法,有点蛋疼

看到有空闲中断,只是想试一下这个功能。
回复

使用道具 举报

4

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2019-4-9
在线时间
79 小时
发表于 2021-7-15 16:37:23 | 显示全部楼层
lipengliang0335 发表于 2021-7-15 14:14
u16 USART_RX_STA=0;       //&#189;óê&#213;×′ì&#172;±ê&#188;&#199;         
u16 USART_IDLE_STA =0; ...

将void  uart_init中USART1->SR;  USART1->DR;删掉,换成USART_ClearFlag(USART1,USART_FLAG_TC);
      
回复

使用道具 举报

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2015-11-25
在线时间
21 小时
 楼主| 发表于 2021-7-17 13:43:25 | 显示全部楼层
虫儿飞Zr86i 发表于 2021-7-15 16:37
将void  uart_init中USART1->SR;  USART1->DR;删掉,换成USART_ClearFlag(USART1,USART_FLAG_TC);
      ...

我试一下
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 23:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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