高级会员

- 积分
- 997
- 金钱
- 997
- 注册时间
- 2012-9-17
- 在线时间
- 29 小时
|
5金钱
是这样的,我用串口4向PC发送数据,用的是这一条语句:UART4->DR=0x0A; 但是串口调试助手上接受到的数据却是 E6 00,
明显是波特率没对上,但是,请看图:
应该都对应上了,为什么数据接受会错误呢?
顺便让大家看看我的串口4初始化程序:
void uart4_init(u32 pclk1,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<3; //使能PORTB口时钟   B.8输出控制485芯片的读和写。
GPIOB->CRH&=0XFFFFFFF0; //IO状态设置
GPIOB->CRH|=0X00000003; //IO状态设置
RCC->APB2ENR|=1<<4; //使能PORTC口时钟
GPIOC->CRH&=0XFFFF00FF; //IO状态设置
GPIOC->CRH|=0X00008B00; //IO状态设置
RCC->APB1ENR|=1<<19; //使能串口时钟
RCC->APB1RSTR|=1<<19; //复位串口4
RCC->APB1RSTR&=~(1<<19);//停止复位
//波特率设置
UART4->BRR=mantissa; // 波特率设置
UART4->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_UART4_RX //如果使能了接收
//使能接收中断
UART4->CR1|=1<<8; //PE中断使能
UART4->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(2,0,UART4_IRQChannel,2); //组3,抢占优先级2 子优先级0
#endif
}
|
最佳答案
查看完整内容[请看2#楼]
现在找到原因了,我跳过485芯片,直接从单片机的引脚上接收TTL电平信号,是正确的,问题出在MAX487芯片上,但是我换过芯片了,还是这样,为什么这个芯片会出问题呢? 下面上图,
这个图有问题么?
|