最近在做一个用HT9032解码来电显示号码的项目,通过HT9032将来电信息解码,他将数据按1200波特率,8位数据位送出。将此模块接到电脑串口上通过串口助手接收发过来的数据,串口助手使用1200波特率,8位数据位,采集的数据完全正确。。。。将采集的数据通过串口助手发送到我的单片机上,在屏幕上可以正确的解码出来电时间,来电号码。。。但是呢,把HT9032的模块和单片机直接相连,单片机接收的数据就全乱了,全部都是乱码。。。调了很长时间了,还没找到原因~~~~希望大侠们指点啊~~~~~
下面是我串口设置:
void USART1_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
USART_DeInit(USART1); //将USART1复位为缺省值
RCC_APB2PeriphClockCmd(USART1_RCC|RCC_APB2Periph_AFIO|
RCC_APB2Periph_USART1,ENABLE); //使能GPIOA时钟,使能复用端口时钟,使能USART1时钟
/*****USART1 TX引脚设置******/
GPIO_InitStructure.GPIO_Pin =USART1_TX_PIN; //设置PA9引脚,TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(USART1_GPIO, &GPIO_InitStructure); //将设置赋值给寄存器,进行初始化
/******USART1 RX引脚设置*****/
GPIO_InitStructure.GPIO_Pin =USART1_RX_PIN; //设置PA10引脚,RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚速度50M
GPIO_Init(USART1_GPIO, &GPIO_InitStructure); //写入配置
/******USART初始化****/
USART_InitStructure.USART_BaudRate = 1200; //设置波特率1200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置数据流7bit
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位,1位
USART_InitStructure.USART_Parity = USART_Parity_No; //偶校验
USART_InitStructure.USART_HardwareFlowControl = //硬件控制流失能
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode =USART_Mode_Tx|USART_Mode_Rx;//开启发送和接受
USART_Init(USART1, &USART_InitStructure); //设置USART寄存器
/*****开USART中断****/
USART_Cmd(USART1, ENABLE); //开启串口通信
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //使能USART串口中断
} |