OpenEdv-开源电子网

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

stm32f051串口如何实现一次中断接收多个数据,欢迎拍砖指教,本人初学

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-5-14
在线时间
0 小时
发表于 2013-5-23 09:44:10 | 显示全部楼层 |阅读模式

 #include<stm32f0xx.h>
uint8_t InputData[48]     ="             请发送打印信息            \n";


void USART1_TX_Data(uint8_t *pData,uint16_t TX_NumByte);

int main(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  USART_InitTypeDef  USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOC, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
 

  //PA9、PA10复用功能1
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);
  GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_9|GPIO_Pin_10;         
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
  //串口配置
  USART_InitStructure.USART_BaudRate      = 115200;
  USART_InitStructure.USART_WordLength     = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits      = USART_StopBits_1;
  USART_InitStructure.USART_Parity     = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode       = USART_Mode_Rx | USART_Mode_Tx;
  USART_Init(USART1, &USART_InitStructure); 
  USART_Cmd(USART1, ENABLE);
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ClearFlag(USART1,USART_FLAG_TC);

         
  NVIC_InitStructure.NVIC_IRQChannel     = USART1_IRQn;  
  NVIC_InitStructure.NVIC_IRQChannelPriority      = 4;         
  NVIC_InitStructure.NVIC_IRQChannelCmd    = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  USART1_TX_Data(InputData,sizeof(InputData));
  while(1)
  {

  }
}

void USART1_TX_Data(uint8_t *pData,uint16_t TX_NumByte)
{
 uint16_t i;
 for(i=0;i<TX_NumByte;i++) 
  {
  USART_SendData(USART1,*pData++);
  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  }
 
}


中断服务函数
void USART1_IRQHandler(void)
{
 unsigned char Getdata[16];
 unsigned int rdata=0,i;
 for(;;)
 {
  if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
  {
   USART_ClearITPendingBit(USART1,USART_IT_RXNE);
   Getdata[rdata++]=USART_ReceiveData(USART1);
   continue;
  } 
  break;
  
 }
 for(i=0;i<rdata;i++)
 {
  USART_SendData(USART1,Getdata);
  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
 }
}

串口实验.zip

6.68 MB, 下载次数: 1238

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

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-5-14
在线时间
0 小时
 楼主| 发表于 2013-5-23 09:46:33 | 显示全部楼层
收发单字节没有问题,我想是进一次中断接收多个数据,请原谅我在中断直接发送处理,如果来一个字节就中断一次那中断实在太频繁了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-23 10:12:29 | 显示全部楼层
那还不如直接查询呢...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-23 10:12:37 | 显示全部楼层
中断都省了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2013-5-23 10:34:44 | 显示全部楼层
可以使用DMA,直接存放大量数据,呵呵!
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-5-14
在线时间
0 小时
 楼主| 发表于 2013-5-23 11:37:44 | 显示全部楼层
回复【3楼】正点原子:
那还不如直接查询呢...
---------------------------------
额,那不得累死啊
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-5-14
在线时间
0 小时
 楼主| 发表于 2013-5-23 12:59:50 | 显示全部楼层
回复【5楼】tian123chi:
---------------------------------
正在尝试这种方式
回复 支持 反对

使用道具 举报

头像被屏蔽

263

主题

455

帖子

1

精华

禁止访问

积分
1212
金钱
1212
注册时间
2011-9-25
在线时间
12 小时
发表于 2013-5-23 13:04:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-5-23 13:56:49 | 显示全部楼层
晕...竟然因为中断太频繁而选择在中断等待...中断有使用次数限制么大侠?

接收不说,发送一个字节等待100us,可以干非常非常多事情了.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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