OpenEdv-开源电子网

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

rs485无法跟电脑上位机通讯,采用rs485转usb跟电脑连接

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2023-6-25
在线时间
1 小时
发表于 2023-6-25 17:30:48 | 显示全部楼层 |阅读模式
1金钱
void RS485_Init(u32 bound)
{  
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
     NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);//使能GPIOA,D时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                 //PD7端口配置
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    //PA2
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //复用推挽
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);  

    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);//复位串口2
    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);//停止复位   
#ifdef EN_USART2_RX              //如果使能了接收
    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); ; //初始化串口
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //使能串口2中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //先占优先级2级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级2级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
    NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断  
  USART_Cmd(USART2, ENABLE);                    //使能串口
#endif
  RS485_TX_EN=0;            //默认为接收模式
}

void RS485_Send_Data(u8 *buf,u8 len)
{
    u8 t;
    RS485_TX_EN=1;            //设置为发送模式
      for(t=0;t<len;t++)        //循环发送数据
    {           
        while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);   
    USART_SendData(USART2,buf[t]);
    }   
    while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);        
    RS485_RX_CNT=0;      
    RS485_TX_EN=0;                //设置为接收模式   

}


void
USART_SendData(USART_TypeDef* USARTx, uint16_t  Data)
{
        assert_param(IS_USART_ALL_PERIPH(USARTx));
        assert_param(IS_USART_DATA(Data));
        USARTx->DR = (Data & (uint16_t)0x01FF);
       while
       (USART_GetFlagStatus(USARTx,USART_FLAG_TXE) == RESET);
         //等待发送缓冲区空才能发送下一个字符
}         



int main(void)
{
    u8 i = 0, t = 0;
    u8 cnt = 0;
    u8 rs485buf[5];
  uint8_t data = 0xAA;   
    delay_init();
    uart_init(115200);
    RS485_Init(115200);
    //LED_Init();   
    while(1)
    {
//        USART_SendData(USART2,data);        
        for ( i = 0; i < 5; i++)
        {
            rs485buf[i] = cnt + i;
        }
        RS485_Send_Data(rs485buf, 5);
        t++;
        delay_ms(10);
        if (t == 5)
        {
            LED0 = !LED0;        //提示数据正在发送
            t = 0;
            cnt++;
        }   
    }
}

经过调试,发现到USART_SendData时,没有串口收到数据



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

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2023-6-25
在线时间
1 小时
 楼主| 发表于 2023-6-25 17:31:40 | 显示全部楼层
RS485_TX_EN=0;已修改为#define RS485_TX_EN  PAout(4)                
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-6-26 10:06:18 | 显示全部楼层
接收中断呢,没触发?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 06:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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