本帖最后由 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, 下载次数: 14)
|