中级会员
 
- 积分
- 309
- 金钱
- 309
- 注册时间
- 2016-5-20
- 在线时间
- 45 小时
|
5金钱
//有请大家帮忙看看,静默模式收不到数据
USART_WakeUpConfig(USART2,USART_WakeUp_AddressMark); //USART2为地址标记唤醒
USART_SetAddress(USART2, 0X01); //设置USART2的站号为节点地址
USART_ReceiverWakeUpCmd(USART2,ENABLE); //使能接收唤醒
上面这3行代码不要,能准确的收到数据;
要上面这3行代码,就收不到数据;
是不是哪里设置有问题,请帮忙指点下,谢谢!
下面附上串口助手监控数据的图片
//STM32参考手册540页,USART寄存器描述
//STM32参考手册526页,设置静默模式,
void RS485_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART2_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); //使能GPIOD时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE); //使能GPIOF时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //使能USART2时钟
USART_DeInit(USART2);
//发送接收控制模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //PD7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//USART2-TX
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //PA2
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽
GPIO_Init(GPIOA,&GPIO_InitStructure);
//USART2-RX
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; //PA3
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //下拉输入
GPIO_Init(GPIOF,&GPIO_InitStructure);
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);//复位串口2
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);//停止复位
USART2_InitStructure.USART_BaudRate=115200; //波特率115200
USART2_InitStructure.USART_WordLength=USART_WordLength_8b; //数据位8位
USART2_InitStructure.USART_StopBits=USART_StopBits_1; //停止位1位
USART2_InitStructure.USART_Parity=USART_Parity_No ; //无校验
USART2_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //无硬件流
USART2_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; //发送/接收使能
USART_Init(USART2,&USART2_InitStructure); //初始化USART2成员变量
USART_Cmd(USART2,ENABLE); //串口使能
USART_WakeUpConfig(USART2,USART_WakeUp_AddressMark); //USART2为地址标记唤醒
USART_SetAddress(USART2, 0X01); //设置USART2的站号为节点地址
USART_ReceiverWakeUpCmd(USART2,ENABLE); //使能接收唤醒
NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn; //USART2全局中断
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //通道使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; //子优先级为1
NVIC_Init(&NVIC_InitStructure); //初始化中断成员变量
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); //开串口RXNE中断使能
RS485_TX_EN=0; //默认为接收模式
}
|
-
-
|