OpenEdv-开源电子网

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

stm32 串口双向通信 无法实现??

[复制链接]

7

主题

32

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-16
在线时间
13 小时
发表于 2015-5-28 16:58:21 | 显示全部楼层 |阅读模式
5金钱

求助论坛大神们,一个简单的串口例程,就是参照论坛里有的很多了;;

两个单片机,都分别用USART1发送,USART2接收;可以很好地通信;

但是这样就把串口资源占满了啊;既然串口可以双向通信,那我想设置两个单片机都用USART2,进行接收和发送就不行了呢???


都用接收中断,配置好后就无法通信了,请教各位大神们!


中断函数



int main(void)

{

    SystemInit();        //系统时钟设置

    delay_init(72);      //延时初始化
    USART_ConfigForCom_TX();

while(1)
 USART_SendData(USART2,TxBuffer[0]);
       while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);//每发送一次都要检查发送完成否

          while(RxBuffer[flag]!='\0')

/         printf("c%",RxBuffer[0);

}
void USART2_IRQHandler(void)
{
   int i=0;      //中断内读取字符串组用
   flag=0;         //主函数中打印字符串组用,每进一次中断就清零
//   GPIO_Write(GPIOF,0X340);     //进入中断的指示灯
   if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)    //确保是接收中断发生
   {
      while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==SET) //当接收数据寄存器不为空时就不停地接收
   {
         RxBuffer[i++]=USART_ReceiveData(USART2);    // 将接收到的数据放入缓冲数组里
      }
   USART_ClearITPendingBit(USART2,USART_IT_RXNE);   //清接收中断标志位,不然退不出中断
   }


串口设置:

void USART_ConfigForCom_TX(void)
{
   //定义GPIO,,NVIC,USART结构体
   GPIO_InitTypeDef GPIO_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;
   USART_InitTypeDef USART_InitStructure;
   //开PA口复用时钟,初始化系统时钟
   SystemInit();
   //调试用指示灯 
   //对接收器的串口2配置
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
   //配置PA2即USART2_TX_
   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
   GPIO_Init(GPIOA,&GPIO_InitStructure);
   //配置PA3即USART2_RX
   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOA,&GPIO_InitStructure);
   //进行USART2的中断配置
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
   NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    //优先级为第0级
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStructure);
   //配置USART2
/******************************************************
     波特率为115200,字长为8,无奇偶校验位,终止位为1.
******************************************************/
   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(USART2,&USART_InitStructure);
   //开USART2中断触发方式为接收中断
   USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//不能开IT-TXE中断使能,因为初始化时也会有TXE置位,因为此时发送数据寄存器为空
   //使能USART2的时钟
   USART_Cmd(USART2,ENABLE);
   //清除USART2的发送结束标志位,以免第一个字符发送不出去
   USART_ClearFlag(USART2,USART_FLAG_TC);
   //串口2设置完成
}


求助啊?那里有问题呢,如何用一个串口双向通信呢???

最佳答案

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

建议你监视下串口上面的数据。分析下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-28 16:58:22 | 显示全部楼层
建议你监视下串口上面的数据。分析下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

32

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-16
在线时间
13 小时
 楼主| 发表于 2015-5-28 17:02:52 | 显示全部楼层
自顶,,,求助 详细点解答  多谢
回复

使用道具 举报

7

主题

32

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-16
在线时间
13 小时
 楼主| 发表于 2015-5-28 17:11:21 | 显示全部楼层
用一个串口和PC机通信是可以的,用两个单片机通信就不行了
回复

使用道具 举报

7

主题

32

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-16
在线时间
13 小时
 楼主| 发表于 2015-6-2 10:56:43 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
好的!!
回复

使用道具 举报

0

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2014-6-7
在线时间
7 小时
发表于 2015-6-2 14:12:26 | 显示全部楼层
串口本来就是TXD和RXD独立传输,收发时序自己控制
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 18:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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