初级会员

- 积分
- 66
- 金钱
- 66
- 注册时间
- 2014-2-28
- 在线时间
- 2 小时
|
5金钱
程序如下:
//初始化IO 串口3
//pclk1 CLK1时钟频率(Mhz)
//bound:波特率
void RS485_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<<2; //使能PORTA口时钟   A1 485接、收控制位
GPIOA->CRL&=0XFFFFFF0F; //IO状态设置
GPIOA->CRL|=0X00000030; //IO状态设置
RCC->APB2ENR|=1<<3; //使能PORTB口时钟
GPIOB->CRH&=0XFFFF00FF; //IO状态设置
GPIOB->CRH|=0X00008B00; //IO状态设置 PB10 TX PB11 RX
RCC->APB1ENR|=1<<18; //使能串口3时钟
RCC->APB1RSTR|=1<<18; //复位串口3
RCC->APB1RSTR&=~(1<<18);//停止复位
//波特率设置
USART3->BRR=mantissa; // 波特率设置
USART3->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_USART3_RX //如果使能了接收
//使能接收中断
USART3->CR1|=1<<8; //PE中断使能
USART3->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART3_IRQn,2);//组2,最低优先级
#endif
RS485_TX_EN=0; //默认为接收模式
}
void USART3_IRQHandler(void)
{
u8 res;
static MotorState Mostate;
if(USART3->SR&(1<<5))//接收到数据 收到数据 可以接收
{
//处理接收到的数据
}
}
是参照旗舰版程序uart2改的程序,但是死活进不了接收中断,求指点 |
最佳答案
查看完整内容[请看2#楼]
回复【4楼】pener:
---------------------------------
解决了,其实是我的485电路有问题
|