这是串口发送程序
void USART_Send( u8 portNum, u8 res)
{
if ( portNum == 1 )
{
USART1->DR= res;
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
// USART1->SR &= ~(1 << 6);
}
else if ( portNum == 2 )
{
USART2->DR= res;
while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
// USART2->SR &= ~(1 << 6);
}
else if ( portNum == 3 )
{
USART3->DR= res;
while((USART3->SR&0X40)==0);//循环发送,直到发送完毕
// USART3->SR &= 0 << 6;
}
}
这是初始化
void uart3_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<<4; //使能PORTC时钟
RCC->APB1ENR|=1<<18; //使能串口3时钟
// RCC->APB2ENR|=1<<0; //辅助功能IO时钟开启。
RCC->APB1RSTR|=1<<18; //复位串口3
RCC->APB1RSTR&=~(1<<18);//停止复位
USART3->BRR=mantissa; // 波特率设置
//UE=1:USART模块允许;M=0:1个起始位,8个数据位,n个停止位;TE=1:发送允许;RE=1:接收允许
USART3->CR1|=0X200C;
#ifdef EN_USART2_RX //如果使能了接收
//使能接收中断
USART3->CR1|=1<<8; //PE中断使能
USART3->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART3_IRQChannel,2);//组2,最低优先级
#endif
}
这是串口时钟配置uart3_init(36,115200); //串口3初始化为115200
这是GPIO口配置
void GPIOC_Init(void)
{
GPIOC->CRH&=0XFFFF00FF;
GPIOC->CRH|=0X00004B00;//IO状态设置//将发送端的管脚(PC10)配置为复用推挽输出,将接收端的管脚(PC11)配置为浮空输入
}
最后是发送程序USART_Send(3,0x01);
串口调试助手没收到任何东西 |