本帖最后由 sbkd123 于 2018-12-31 10:28 编辑
串口4仿照例程操作不能工作,经反复调试终于发现解决办法。直接上程序。[mw_shl_code=c,true]void UART4_Init(u32 pclk1,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
uint32_t usartxbase = USART1_BASE+0x14;//USART1->CR3地址
USART1->CR1 |= 0x4; //打开了USART1的RX
*(__IO uint32_t*)usartxbase |= 0x20;//打开了USART1的RXNE
temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<4; //使能PORTC口时钟
RCC->APB1ENR|=1<<19; //使能串口4时钟
GPIOC->CRH&=0XFFFFF0FF;
GPIOC->CRH|=0X00000B00;
GPIOC->CRH&=0XFFFF0FFF;
GPIOC->CRH|=0X00004000;
MY_NVIC_Init(0,0,UART4_IRQn,4);//组4,最低优先级
RCC->APB1RSTR|=1<<19; //复位串口4
RCC->APB1RSTR&=~(1<<19);//停止复位
UART4->CR1|=0X0C; //1位停止,无校验位.
#ifdef EN_USART4_RX //如果使能了接收
//使能接收中断
UART4->CR1|=1<<8; //PE中断使能
UART4->CR1|=1<<5; //接收缓冲区非空中断使能
UART4->CR1 |= 0x20;
#endif
UART4->BRR=mantissa; // 波特率设置
UART4->CR1 |= 0x2000;
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>