现在想将51单片机编写的程序移植到STM32开发环境下面去,移植过程中遇到定时器以及串口中断配置问题
请各位指点:
void uart3_init(u32 pclk2,u32 bound)
{
float
temp;
u16
mantissa;
u16
fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16;
//得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<3; //使能PORTB口时钟
RCC->APB1ENR|=1<<18; //使能串口时钟
GPIOB->CRH&=0XFFFF00FF;
GPIOB->CRH|=0X00008B00;//IO状态设置
RCC->APB1RSTR|=1<<18; //复位串口1
RCC->APB1RSTR&=~(1<<18);//停止复位
//波特率设置
USART3->BRR=mantissa; // 波特率设置
USART3->CR1|=0X200C; //1位停止,无校验位.
#ifdef EN_USART3_RX //如果使能了接收
//使能接收中断
USART3->CR1&=0xFFFB; //接收缓冲区非空中断使能
USART3->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(1,1,USART3_IRQChannel,2);//组2,最低优先级
#endif
}
请问下面两条语句配置的对吗?
USART3->CR1|=0x0004;串口3接收中断使能
USART3->CR1&=0xFFFB; 串口3接收中断禁止
void WaitForACKTimer_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<2;//TIM4时钟使能
TIM4->ARR=arr; //设定计数器自动重装值//刚好1ms
TIM4-> SC=psc; //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM4->DIER|=1<<0; //允许更新中断
// TIM4->DIER|=1<<6; //允许触发中断
TIM4->CR1&=0xFFFE; //使能定时器3
MY_NVIC_Init(2,2,TIM4_IRQChannel,2);//抢占1,子优先级3,组2
}
请问下面两条语句配置的对吗?
TIM4->CR1&=0xFFFE; 禁止定时器4
TIM4->CR1|=0x0001; 使能定时器4
其余代码全部移植,就是要配置串口和中断,我怀疑是这两个地方的问题,用什么办法测试一下定时器和串口配置正确呢?请高手指点 ,谢谢
|