OpenEdv-开源电子网

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

USART2进入接收中断就卡死

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-5-11
在线时间
0 小时
发表于 2011-5-11 15:36:50 | 显示全部楼层 |阅读模式

#if 1
#pragma import(__use_no_semihosting)            
//标准库需要的支持函数                
struct __FILE
{
 int handle;
 /* Whatever you require here. If the only file you are using is */
 /* standard output using printf() for debugging, no file handling */
 /* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
_sys_exit(int x)
{
 x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{      
 USART2->DR = (u8) ch;     
 while((USART2->SR&0X40)==0);
 return ch;
}
#endif

#ifdef EN_USART2_RX   //如果使能了接收
 
 
 void send_usart2(unsigned char GPS_DATA)
{
  USART2->DR=GPS_DATA;
   LED0=!LED0;
  while((USART2->SR&0X40)==0)LED0=!LED0;//等待发送结束
}
 

void USART2_IRQHandler(void)
{
 LED1=!LED1; 
 if(USART2->SR&(1<<5))//接收到数据
 {
      send_usart2(USART1->DR);
}          
}
#endif


          
void uart2_init(u32 pclk2,u32 bound)
{   
 float temp;
 u16 mantissa;
 u16 fraction;   
 temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
    mantissa=temp;     //得到整数部分
    fraction=(temp-mantissa)*16; //得到小数部分 
       mantissa<<=4;
    mantissa+=fraction;
    RCC->APB2ENR|=1<<2;   //使能PORTA口时钟 
    RCC->APB1ENR|=1<<17;//使能串口2时钟
    GPIOA->CRL=0X44448344;//
      
    RCC->APB1RSTR|=1<<17;
    RCC->APB1RSTR&=~(1<<17);
    
           
   
    USART2->BRR=mantissa;
    USART2->CR1|=0X200C;
   
   #ifdef EN_USART2_RX    //如果使能了接收
    //使能接收中断
   
    USART2->CR1|=1<<8;
    USART2->CR1|=1<<5;
    MY_NVIC_Init(3,3,USART2_IRQChannel,2);
   #endif
   }
我是改改原子哥原来的代码,发送正常,但是接收就会出错了!

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-5-11 17:57:59 | 显示全部楼层
回复【楼主位】langtao:
-------------------------------
肯定错了.你串口2的中断里面都没有清除中断标志,怎么能 不错?多看看书吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-5-11
在线时间
0 小时
 楼主| 发表于 2011-5-15 15:55:38 | 显示全部楼层
原子哥!我觉得不对!你的代码里也没有清除中断标志的哦!还有我现在的USART2正常工作了!也没有在中断里清除中断标志哦,改了一下IO口的状态!感觉很怪异的哦!
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2011-5-11
在线时间
0 小时
 楼主| 发表于 2011-5-15 15:56:41 | 显示全部楼层
现在我的两个串口工作都非常正常呢!
回复 支持 反对

使用道具 举报

0

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2014-1-11
在线时间
23 小时
发表于 2016-6-19 19:55:54 | 显示全部楼层
参考下,很好
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 18:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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