OpenEdv-开源电子网

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

无法进入串口中断,路过的指点一下

[复制链接]

32

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2011-8-15
在线时间
33 小时
发表于 2011-9-23 10:13:28 | 显示全部楼层 |阅读模式
无法进入串口中断,在UCOSii下面的,串口可以收发数据,但中断无法进入,现在想换成中断方式发送,

COM1 初始化
void COM1Init(void)
{
  USART_InitTypeDef USART_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_9b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_Even;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_TXE , ENABLE);
  BSP_IntVectSet(BSP_INT_ID_USART1, BSP_IntHandlerUSART1);  //中断向量设置的 ,BSP_IntHandlerUSART1是中端服务函数
   BSP_IntPrioSet(BSP_INT_ID_USART1,1);  
   BSP_IntEn(BSP_INT_ID_USART1); 
  
  USART_Init(USART1, &USART_InitStructure);  
  USART_Cmd(USART1, ENABLE);
  COM_SEL(0);
  BSP_IntInit ();
}
引脚初始化
void COM1GpioConfig(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}

NVIC
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00000);
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-9-23 11:50:03 | 显示全部楼层
回复【楼主位】abnerle:
---------------------------------
不用ucosii行么?
串口不建议使用中断发送!!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2011-8-15
在线时间
33 小时
 楼主| 发表于 2011-9-23 13:59:06 | 显示全部楼层
回复【2楼】正点原子:
回复【楼主位】abnerle: --------------------------------- 不用ucosii行么? 串口不建议使用中断发送!!!
---------------------------------
不行啊,要求必须用中断+循环队列,循环队列是纯粹的软件性问题,已经搞定了,中断就是进不去,不知道哪里有问题
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-9-23 18:00:53 | 显示全部楼层
给你我的ucos种的串口中断参考一下:
void USART1_IRQHandler(void)
{
u8 res;
#ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntEnter();    
#endif
if(USART1->SR&(1<<5))//接收到数据
{  
res=USART1->DR;   
if(USART_RX_CNT==0)Timer2_Set(1);//使能定时器2的中断        
if(USART_RX_CNT<USART_REC_LEN)
{
USART_RX_BUF[USART_RX_CNT]=res;
USART_RX_CNT++;        
}
}
#ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntExit();    
#endif

#endif  
//初始化IO 串口1
//pclk2CLK2时钟频率(Mhz)
//bound:波特率
//CHECK OK
//091209
void uart_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->APB2ENR|=1<<14;  //使能串口时钟 
GPIOA->CRH&=0XFFFFF00F;//IO状态设置
GPIOA->CRH|=0X000008B0;//IO状态设置
  
RCC->APB2RSTR|=1<<14;   //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位        
//波特率设置
  USART1->BRR=mantissa; // 波特率设置  
USART1->CR1|=0X200C;  //1位停止,无校验位.

USART1->CR3=1<<7;     //使能串口1的DMA发送
#if EN_USART1_RX   //如果使能了接收
//使能接收中断
USART1->CR1|=1<<8;    //PE中断使能
USART1->CR1|=1<<5;    //接收缓冲区非空中断使能     
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级 
#endif
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

102

主题

318

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1876
金钱
1876
注册时间
2011-12-21
在线时间
545 小时
发表于 2012-3-16 14:54:23 | 显示全部楼层
回复【2楼】正点原子:
回复【楼主位】abnerle: --------------------------------- 不用ucosii行么? 串口不建议使用中断发送!!!
---------------------------------
请问原子哥,为什么不建议中断发送啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-16 21:56:10 | 显示全部楼层
回复【5楼】玻璃之城2046:
---------------------------------
中断方式发送太傻逼了....
要嘛直接发送,要嘛DMA发送,多爽.中断发送一个字节来一个中断,很爽么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-16 22:57:08 | 显示全部楼层
在不知道DMA的情况下我就只想到中断了,呵呵
https://github.com/roxma
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2012-3-17
在线时间
1 小时
发表于 2012-3-17 01:02:57 | 显示全部楼层
DMA确实爽。
回复 支持 反对

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2012-5-29
在线时间
0 小时
发表于 2012-8-15 17:46:41 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,在ucos中 我想用串口中断接收数据,可是一直没有调试成功  ,看了我们论坛也没有找到方法,只有麻烦您了。

void USART1_IRQHandler(void) 

u8 res;
#ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了. 
OSIntEnter();     
#endif 
if(USART1->SR&(1<<5))//接收到数据 
{   
    
res=USART1->DR; 
 USART1_Putchar(res); //发送原数据到上位机(已通过测试)
 LED0=!LED0;                
 

#ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了. 
OSIntExit();      
#endif 
}  
这个串口中断服务函数,串口初始化,和其他的东西都没有改,不知道  是哪里出错了 。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-15 18:30:14 | 显示全部楼层
仿真跟踪.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-21 05:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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