bobby2019 发表于 2019-9-25 19:49:37

STM32F042F6 串口空休中断,DMA发送与接收异常

各位大师你们好,使用STM32CubeMX新建STM32F042F6 串口空休中断,DMA发送与接收,停机模式下,看门狗唤醒后,串口有时接收不到数据或不发送数据;请师指点,谢谢!
void MX_USART1_UART_Init(void)
{

huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
    Error_Handler();
}

}


recv_end_flag = HAL_UART_Transmit_DMA(&huart1,&Eppprom.EditReg.regByte.ID ,Eppprom.EditReg.regByte.len+1);
recv_flag = HAL_UART_Receive_DMA(&huart1,&rx_buffer,DEF_BUFFER_RX_SIZE);

Dandjinh 发表于 2019-9-30 09:44:16

退出停止模式后,其他时钟还是保持原来的配置(以外部高速时钟HSE不分频作为PLL时钟源,再经过9倍频得到,即72MHz,然后PLL作为系统时钟源,系统时钟一分频得到AHB总线时钟,AHB再 一分频作为高速总线时钟PCLK2,也就是72MHz,USART1用的就是高速总线时钟),这些配置是不会变的,但是退出停止模式后,内部高速时钟(HSI)默认变成了系统时钟源,造成时钟紊乱。

【其实不仅仅是串口,其他在进入停止模式之前的外设在退出停止模式之后都会工作不正常,重新配置系统时钟即可】
页: [1]
查看完整版本: STM32F042F6 串口空休中断,DMA发送与接收异常