OpenEdv-开源电子网

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

485通讯的疑问 请各位达人指点指点

[复制链接]

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-9-6
在线时间
26 小时
发表于 2012-12-8 11:04:18 | 显示全部楼层 |阅读模式

RS485的疑问,软件仿真的时候有数据输出,可是到硬件仿真的时候拿示波器探头探就没有数据了,程序是在原子兄战舰版例程基础上改的
用USART1做发送和接收,引脚重定义到PB6和PB7,请各位达人指点

//接收缓存区 
u8 RS485_RX_BUF[64]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10};   //接收缓冲,最大64个字节.
//接收到的数据长度
u8 RS485_RX_CNT=0;


void uart_init(u32 bound){
    //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
    //USART1_TX   PB.6
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);// GPIO_Init(GPIOA, &GPIO_InitStructure);
  
    //USART1_RX   PB.7
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStructure);// GPIO_Init(GPIOA, &GPIO_InitStructure);
   // 485模式控制口 PA.12
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;     //PA12端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure); 

 

   //Usart1 NVIC 配置

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //

 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能
 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1
 
   //USART 初始化设置
  
 USART_InitStructure.USART_BaudRate = bound;//一般设置为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_HardwareFlowControl = USART_HardwareFlowControl_None;
 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_Init(USART1, &USART_InitStructure);
  

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断
  
    USART_Cmd(USART1, ENABLE);                    //使能串口
    RS485_TX_EN=0;   //默认为接收模式
}

//RS485发送len个字节.
//buf:发送区首地址
//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
void RS485_Send_Data(u8 *buf,u8 len)
{
 u8 t;
 RS485_TX_EN=1;   //设置为发送模式
   for(t=0;t<len;t++)  //循环发送数据
 {    
  while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);  
  USART_SendData(USART1,buf[t]);
 } 
 
 while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); 
 RS485_RX_CNT=0;  
 RS485_TX_EN=0;    //设置为接收模式
}
//RS485查询接收到的数据
//buf:接收缓存首地址
//len:读到的数据长度
void RS485_Receive_Data(u8 *buf,u8 *len)
{
 u8 rxlen=RS485_RX_CNT;
 u8 i=0;
 *len=0;    //默认为0
 delay_ms(10);  //等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束
 if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了
 {
  for(i=0;i<rxlen;i++)
  {
   buf=RS485_RX_BUF;
  } 
  *len=RS485_RX_CNT; //记录本次数据长度
  RS485_RX_CNT=0;  //清零
 }
}
void USART1_IRQHandler(void)
{
 u8 res;    
 
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收到数据
 { 
     
  res =USART_ReceiveData(USART1);  //读取接收到的数据
  if(RS485_RX_CNT<64)
  {
   RS485_RX_BUF[RS485_RX_CNT]=res;  //记录接收到的值
   RS485_RX_CNT++;      //接收数据增加1
  }
 }             
}


 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-9-6
在线时间
26 小时
 楼主| 发表于 2012-12-8 12:27:22 | 显示全部楼层
回复【2楼】正点原子:
--------------------------------
软件仿真  有数据输出的
如图01 02 03 04 05就是我要发送的数据
可是一旦拿示波器探头探发送引脚,引脚上就是没有波形输出,一直都是低电平的信号
 



回复 支持 反对

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-9-6
在线时间
26 小时
 楼主| 发表于 2012-12-8 12:27:52 | 显示全部楼层
 


回复 支持 反对

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-9-6
在线时间
26 小时
 楼主| 发表于 2012-12-8 12:46:25 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
有了有了  是串口1没复位的缘故  看来在硬件上仿真  还要注意更多的细节
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 04:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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