OpenEdv-开源电子网

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

SOS呼叫 :串口接收进入不了中断?

[复制链接]

14

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2011-10-16
在线时间
31 小时
发表于 2011-12-25 21:07:11 | 显示全部楼层 |阅读模式

             被这个程序整的没脾气了!大家来看看吧。串口接收中断总是进不去 , 不知道哪里设置错误,

我这个程序是我在 USART1的基础上改过来的,现在接收不了串口调试助手发来的数据,串口调试助手能收到USART3发出去的数据,

 


程序的意思是这样:   STM32 main()里初始化外设,等待接收到数据的标志位flag,然后STM32 串口3中断接受这个数据,然后置位接收到数据的标志flag,把收到的数据存入temp 变量, STM32主程序就一直判断的这个标志位,如果置位了 就把这个收到的数据temp 回传到串口调试助手,并复位flag,进入下次接受

 

 

中断处理如下

#include "stm32f10x_it.h"

 extern volatile unsigned char temp;
 extern volatile unsigned char flag;
 
void USART3_IRQHandler(void) //串口1中断服务程序
{
 if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
 {
        temp =USART_ReceiveData(USART3);
     flag=1;
 }
}

//主程序

volatile unsigned char flag =0;
volatile unsigned char temp =0;

 void NVIC_Configuration(void);
 void GPIO_Configuration(void);
 voidUSART_Configuration(void);

int main(void)
{       
 SystemInit();
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 , ENABLE);


 NVIC_Configuration();
 GPIO_Configuration();
 USART_Configuration(); 
 while(1)
 {  
  if(flag)  //   如果保留这行,注释掉下一行 ,调试助手就收不到数据了
  //if(1)  //不注释这行 调试助手能一直收到数据
  {
   flag=0;
   USART_SendData(USART3, temp);
   while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
    }
 }
}

 

void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

 GPIO_StructInit(&GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin= GPIO_Pin_10;
 GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP;
 GPIO_Init(GPIOB, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin= GPIO_Pin_11;
 GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOB,&GPIO_InitStructure);

}

void NVIC_Configuration(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;

 /* Configure the NVIC Preemption Priority Bits */ 
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置优先级分组:先占优先级0位,从优先级4位
 
 //设置向量表的位置和偏移
 #ifdef  VECT_TAB_RAM     
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);   //向量表位于RAM
 #else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   //向量表位于FLASH
 #endif

 /* Enable the USARTy Interrupt */
 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;  //USART1中断
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能
 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1
}
void USART_Configuration(void)
{
 USART_InitTypeDef  USART_InitStructure;
 USART_StructInit(&USART_InitStructure);
 USART_InitStructure.USART_BaudRate= 9600;
 USART_InitStructure.USART_WordLength =USART_WordLength_8b;
 USART_InitStructure.USART_StopBits= USART_StopBits_1;
 USART_InitStructure.USART_Parity =USART_Parity_No;
 USART_InitStructure.USART_Mode= USART_Mode_Rx|USART_Mode_Tx;
 USART_InitStructure.USART_HardwareFlowControl =
 USART_HardwareFlowControl_None;

    USART_Init(USART3, &USART_InitStructure);
 USART_ITConfig(USART3,USART_IT_RXNE, ENABLE);
 USART_Cmd(USART3, ENABLE);
 
}

USART3能发送 接收进入不了中断.rar

269.92 KB, 下载次数: 362

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-25 21:35:01 | 显示全部楼层
回复【楼主位】okyihu:
---------------------------------
参考下我们开发板的库函数例子.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2011-10-16
在线时间
31 小时
 楼主| 发表于 2011-12-25 22:03:03 | 显示全部楼层
我是在开发板的库函数的例子的基础上改出来的 ,先用USART1 改出来了 能正常收发,再改成USART3,编译是这句报错:USART3_IRQn没有定义,查了很久的资料发现时 stm32f10x.h这个文件里宏定义 定义的是低密度芯片LD,我用的是开发板上的RBT片子,属于高密度骗子,如是改成HD,
#if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD) && !defined (STM32F10X_CL)
  /* #define STM32F10X_LD  */  /*!< STM32F10X_LD: STM32 Low density devices */
  /* #define STM32F10X_MD */   /*!< STM32F10X_MD: STM32 Medium density devices */
   #define STM32F10X_HD    /*!< STM32F10X_HD: STM32 High density devices */
  /* #define STM32F10X_CL */  /*!< STM32F10X_CL: STM32 Connectivity line devices */

启动代码也有***LD.S改成***HD.S然后就 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;


编译到是不报错了,但是还是收不到数据,进不了中断 ,网上很多人碰到了进入不了中断的问题
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-26 00:00:20 | 显示全部楼层
回复【3楼】okyihu:
---------------------------------
stm32f103rb属于md,不是hd.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2011-10-16
在线时间
31 小时
 楼主| 发表于 2011-12-26 09:12:50 | 显示全部楼层
是的 是md, 我们公司用的是RET的  但是 你的芯片是MD,但是你配给我们的例子是低密度的哦 ,

大家还是指点一下程序哪里有问题吧,求救,求指点,被这个串口搞得受不了了,几天都睡不好,吃不下啊
回复 支持 反对

使用道具 举报

14

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2011-10-16
在线时间
31 小时
 楼主| 发表于 2011-12-26 09:17:31 | 显示全部楼层
刚刚把代码添加到附件中去了 ,希望有技术高深的好心人路过这里
回复 支持 反对

使用道具 举报

14

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2011-10-16
在线时间
31 小时
 楼主| 发表于 2011-12-26 09:23:48 | 显示全部楼层
改用查询RXNE标志的方式 也收不到数据, 然后JTAG  disable 掉,什么方法都试尽了 ,都没用,
现在我在怀疑是不是一开始新建工程的时候选了 低密度的片子,然后导致这个串口3工作不起来,但是
我后来我把启动代码和 stm32f10x.h的宏定义都改过来了啊,为什么还是不工作呢
回复 支持 反对

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2011-12-23
在线时间
5 小时
发表于 2011-12-26 09:25:16 | 显示全部楼层
感觉配置好像没什么问题哦,你调试的时候查查寄存器状态,看看是不是都符合要求了呢。还有晶振是8M的吧?如果换了晶振就不能直接调用SystemInit()了,要改宏定义的。
回复 支持 反对

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2011-12-23
在线时间
5 小时
发表于 2011-12-26 09:27:29 | 显示全部楼层
RCC_APB2Periph_AFIO没有使能吧
回复 支持 反对

使用道具 举报

14

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2011-10-16
在线时间
31 小时
 楼主| 发表于 2011-12-26 09:50:44 | 显示全部楼层
回复【9楼】quqw:

---------------------------------
呵呵 我刚才吧这个加上去了 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);还是 没有用
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-26 09:59:33 | 显示全部楼层
看看这个别人的现成的:http://www.openedv.com/posts/list/400.htm#1603
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 17:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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