本帖最后由 lisingch 于 2020-5-12 21:47 编辑
在使用官文DEMO对UART1测试中出现了一些比较怪异的现象,实验中首先打开了串口助手软件,然后对例程进行编译下载,应该显示“UART OK!”,但实际上只显示了“UART”字样,准备通过串口助手发送“A”,点击发送后显示“串口号故障!自动修复中...”
折腾半天也没能解决,不知道是什么原因?MM32L073PF内部包含有两个串口:UART1、UART2,其中的UART2通过CN4引出。
于是就在CN4上连接了一只串口模块,并在DEMO基础上修改了程序。在程序移植上要注意一点,UART2是被挂在APB1上。
void uart_initwBaudRate(u32 bound)
{
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
UART_InitTypeDef UART_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE);//开启UART2时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //开启GPIOA时钟
//UART 初始化设置
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);
UART_InitStructure.UART_BaudRate = bound; //串口波特率
UART_InitStructure.UART_WordLength = UART_WordLength_8b;//字长为8位数据格式
UART_InitStructure.UART_StopBits = UART_StopBits_1; //一个停止位
UART_InitStructure.UART_Parity = UART_Parity_No; //无奇偶校验位
UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;//无硬件数据流控制
UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx; //收发模式
UART_Init(UART2, &UART_InitStructure); //初始化串口2
UART_Cmd(UART2, ENABLE); //使能串口2
//UART1_TX GPIOA.2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.2
//UART1_RX GPIOA.3初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PA3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.3
}
int main(void)
{
//delay_init();
uart_initwBaudRate(115200);
printf("\n\r MM32L073PF UART2 TEST ok!");
while(1)
{
}
}
UART2正常工作了,这样可以方便其它的一些实验。
UART2.rar
(254.18 KB)
|