初级会员

- 积分
- 97
- 金钱
- 97
- 注册时间
- 2016-12-12
- 在线时间
- 19 小时
|
1金钱
初始化代码如下,和上位机波特率一样,无论修改通讯设备还是上位机的配置成“奇校验”还是“偶校验”还是“无校验”都能正常收发数据,从配置上看也没用问题,不知道有没有人遇到过这种问题?
void max_485_init(void)
{
uint32_t baud_set,parity_set,WordLength,stopBit_set;
WordLength = USART_WordLength_8b;//--酒店款
//--------波特率-设置------------//
if(sys_para.cfg.baud == 1)
baud_set = 4800;
if(sys_para.cfg.baud == 2)
baud_set = 9600;
if(sys_para.cfg.baud == 3){
baud_set = 19200;
}
if(sys_para.cfg.baud == 4)
baud_set = 38400;
// if(sys_para.cfg.baud == 5)
// baud_set = 57600;
//--------校验位-设置------------//
if(sys_para.cfg.parity == 0)
parity_set = USART_Parity_No;
else{
if(sys_para.cfg.parity == 1)
parity_set = USART_Parity_Odd;
if(sys_para.cfg.parity == 2)
parity_set = USART_Parity_Even;//--偶校验
WordLength = USART_WordLength_9b;
}
//--------停止位-设置------------//
if(sys_para.cfg.stopBit == 1)
stopBit_set = USART_StopBits_1;
if(sys_para.cfg.stopBit == 2)
stopBit_set = USART_StopBits_2;
uart3_485_config(baud_set,parity_set,WordLength,stopBit_set);
}
//---------------------------max485串口配置----------------------//
void uart3_485_config(uint32_t BaudRate,uint32_t Parity,uint32_t WordLength,uint32_t Stopbit)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE );
GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_4);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_4);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = BaudRate;
USART_InitStructure.USART_WordLength = USART_WordLength_9b;//USART_WordLength_8b;//USART_WordLength_9b;//WordLength;//USART_WordLength_8b;
USART_InitStructure.USART_Parity = USART_Parity_Even;//Parity;//USART_Parity_Even;//USART_Parity_No;
USART_InitStructure.USART_StopBits = Stopbit;//USART_StopBits_1;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode =USART_Mode_Tx | USART_Mode_Rx;//USART_InitStructure.USART_Mode =USART_Mode_Tx;//
USART_Init(USART3, &USART_InitStructure);
USART_Cmd(USART3, ENABLE);
// USART_ITConfig(USART3,USART_IT_RXNE,DISABLE);
NVIC_InitStructure.NVIC_IRQChannel = USART3_6_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 3;//2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
|
最佳答案
查看完整内容[请看2#楼]
当然可以正常收发数据。如果你设置了校验,要自己在串口的中断程序里处理校验错误。
如果错误了,是通知对方重新发送这个字节还是这一帧还是直接忽略不处理,直到收到正确数据再响应
|