OpenEdv-开源电子网

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

串口求助

[复制链接]

4

主题

7

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2015-12-28
在线时间
5 小时
发表于 2015-12-28 10:30:41 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 nanke 于 2015-12-28 10:48 编辑

我按照原子哥的串口程序又配置了串口2,功能是两个串口之间互发数据,但是出现了下面的问题,求解

传不上图片

问题是这样,我配置了一个串口2用来做板子之间的通讯

pc连探索板,探索板连zigbee,对面也是同样的连接,收不到数据
但是如果对面不连接板子,zigbee直接连电脑是没有问题的

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

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-12-28 10:41:29 | 显示全部楼层
回复

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2015-12-28 10:45:34 | 显示全部楼层
什么型号单片机,具体单片机是哪个?怎么配置的呢
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复

使用道具 举报

4

主题

7

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2015-12-28
在线时间
5 小时
 楼主| 发表于 2015-12-28 10:50:47 | 显示全部楼层
ST-FAE-SALE 发表于 2015-12-28 10:45
什么型号单片机,具体单片机是哪个?怎么配置的呢

//初始化IO 串口2
//bound:波特率
void uart2_init(u32 bound){
   //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART2时钟

        //串口2对应引脚复用映射
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2复用为USART2,TX
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3复用为USART2,RX
        
        //USART2端口配置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA2与GPIOA3
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //速度50MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
        GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10

   //USART2 初始化设置
        USART_InitStructure.USART_BaudRate = bound;//波特率设置
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
        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(USART2, &USART_InitStructure); //初始化串口1
        
    USART_Cmd(USART2, ENABLE);  //使能串口1
        
        //USART_ClearFlag(USART1, USART_FLAG_TC);
        
#if EN_USART2_RX        
        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启相关中断

        //Usart2 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//串口2中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //子优先级3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器、

#endif
        
}

//串口2中断服务程序
void USART2_IRQHandler(void)                        //串口1中断服务程序
{
        u8 Res;
#if SYSTEM_SUPPORT_OS                 //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
        {
                Res =USART_ReceiveData(USART2);//(USART1->DR);        //读取接收到的数据
               
                if((USART_RX_STA&0x8000)==0)//接收未完成
                {
                        if(USART_RX_STA&0x4000)//接收到了0x0d
                        {
                                if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                                else USART_RX_STA|=0x8000;        //接收完成了
                        }
                        else //还没收到0X0D
                        {        
                                if(Res==0x0d)USART_RX_STA|=0x4000;
                                else
                                {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收         
                                }                 
                        }
                }  
  while( USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET );                        
  USART_SendData(USART1,Res);
                                       //等待串口发送结束
  }
#if SYSTEM_SUPPORT_OS         //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntExit();                                                                                          
#endif
}

#endif        


while(1)
        {       
                if(USART1_RX_STA&0x8000)                //串口1接收到的数据传到串口2
                {
                        len=USART1_RX_STA&0x3fff;
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART2,USART_RX_BUF[t]);
                                while( USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET );
                        }
                        USART1_RX_STA=0;
                }
                if(USART2_RX_STA&0x8000)               //串口2接收到的数据传到串口1
            {
                        len=USART2_RX_STA&0x3fff;
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1,USART_RX_BUF[t]);
                                while( USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET );
                        }
                        USART2_RX_STA=0;
            }
        }

回复

使用道具 举报

4

主题

7

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2015-12-28
在线时间
5 小时
 楼主| 发表于 2015-12-28 11:03:05 | 显示全部楼层
ST-FAE-SALE 发表于 2015-12-28 10:45
什么型号单片机,具体单片机是哪个?怎么配置的呢

探索板
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-12-28 23:16:34 | 显示全部楼层
探索者的485例程,就用到了串口2,你试试探索版的串口2直接和电脑通信,ok么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
金钱
1212
注册时间
2011-4-9
在线时间
97 小时
发表于 2015-12-29 08:43:04 | 显示全部楼层
你的端口配置是不是有问题,发送和接收脚怎么都配成推挽输出了呢。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 21:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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