OpenEdv-开源电子网

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

串口每次只能接收一个字符

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-3-27
在线时间
0 小时
发表于 2015-4-16 17:55:11 | 显示全部楼层 |阅读模式
5金钱
 void USART2_IRQHandler(void)
{
   if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
   { 
if(CMDCount < 90)
CMD[CMDCount++]=USART_ReceiveData(USART2);
if( strstr(CMD,"a")!=NULL)
{

GPIO_SetBits(GPIOF,GPIO_Pin_6);
delay_ms(1000);
GPIO_ResetBits(GPIOF,GPIO_Pin_6);
delay_ms(1000);
}
Clr_CMD();
   }
 USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}



每次进入中断只能接收到第一个字母 
很奇怪
求高手指点 

最佳答案

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

delay_ms,这种函数居然用在串口中断里面 建议楼主先学几个再说吧。
电子设计 stm32 电路 仿真 电路 仿真 matlab 电力电子 单片机电路 数字电子技术 模拟电子技术 CAN总线技术 I2C技术 uart FPGA DSP
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-16 17:55:12 | 显示全部楼层
delay_ms,这种函数居然用在串口中断里面
建议楼主先学几个再说吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-3-27
在线时间
0 小时
 楼主| 发表于 2015-4-16 18:14:08 | 显示全部楼层
void USART2_IRQHandler(void)
{
   if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
   { 
if(CMDCount < 90)

{CMD[CMDCount++]=USART_ReceiveData(USART2);}
 
if( strstr(CMD,"ab")!=NULL)
{
GPIO_SetBits(GPIOF,GPIO_Pin_6);
GPIO_ResetBits(GPIOF,GPIO_Pin_6);
}
Clr_CMD();
   }
 USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
电子设计 stm32 电路 仿真 电路 仿真 matlab 电力电子 单片机电路 数字电子技术 模拟电子技术 CAN总线技术 I2C技术 uart FPGA DSP
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-3-27
在线时间
0 小时
 楼主| 发表于 2015-4-16 18:14:42 | 显示全部楼层
上述方式 都不行
电子设计 stm32 电路 仿真 电路 仿真 matlab 电力电子 单片机电路 数字电子技术 模拟电子技术 CAN总线技术 I2C技术 uart FPGA DSP
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-3-27
在线时间
0 小时
 楼主| 发表于 2015-4-16 18:15:15 | 显示全部楼层
回复【2楼】lqf137:
---------------------------------
上述方式不行,只能发现接不全数据。
电子设计 stm32 电路 仿真 电路 仿真 matlab 电力电子 单片机电路 数字电子技术 模拟电子技术 CAN总线技术 I2C技术 uart FPGA DSP
回复

使用道具 举报

4

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2013-10-17
在线时间
9 小时
发表于 2015-4-16 22:03:51 | 显示全部楼层
我也写过跟你这个类似的,只能接收到第一个数据而已,参考原子哥的代码就可以了
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-3-27
在线时间
0 小时
 楼主| 发表于 2015-4-17 09:11:26 | 显示全部楼层
回复【5楼】498650771:
---------------------------------
老师我在上面专门写了两种方式,下面没有延时,我知道中断不可以延时,都也不行啊。
电子设计 stm32 电路 仿真 电路 仿真 matlab 电力电子 单片机电路 数字电子技术 模拟电子技术 CAN总线技术 I2C技术 uart FPGA DSP
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-4-10
在线时间
12 小时
发表于 2015-4-17 11:15:16 | 显示全部楼层
USART_ReceiveData() 这个函数一次只接受一个数据的吧
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-3-27
在线时间
0 小时
 楼主| 发表于 2015-4-17 13:07:20 | 显示全部楼层
回复【8楼】Oneperson_1:
---------------------------------
void USART2_IRQHandler(void)
{
u8  res;
   if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
   { 
 res =USART_ReceiveData(USART2);  //????????????????
if(CMDCount < 90)

{
CMD[CMDCount]=res;
CMDCount++;
}
   }

 USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
int main(void)
{
   RCC_Configuration(); //?????±????????
   GPIO_Configuration();//??????????
   USART_Configuration();
   NVIC_Configuration();
   
   while(1)
 {
  if( strstr(CMD,"a")!=NULL)
{
GPIO_SetBits(GPIOF,GPIO_Pin_6);
delay_ms(1000);
GPIO_ResetBits(GPIOF,GPIO_Pin_6);
delay_ms(1000);
}
Clr_CMD();
}
这样也是 不行的。
电子设计 stm32 电路 仿真 电路 仿真 matlab 电力电子 单片机电路 数字电子技术 模拟电子技术 CAN总线技术 I2C技术 uart FPGA DSP
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 13:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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