stm32f030c8t6使用内部高速晶振,串口1不工作,串口2和定时器3都工作正常,求大神指点,是不是使用内部晶振,要单独配置串口1

2019-07-21 07:57发布

/*===================================
*   函 数 名: Set_SysClock_ToHSI
*   功能说明: 选择内部晶振8MHz作为系统时钟。
                          SYSCLK:48MHz,AHB:48MHz;
                          APB1:48MHz,HCLK:48MHz.
*   形    参:无
*   返 回 值: 无
=====================================*/
这是使用内部8MHZ高速晶振函数
void Set_SysClock_ToHSI(void)
{                                                                
        RCC_DeInit();                 //将外设RCC寄存器重设为缺省值
       
        RCC_HSICmd(ENABLE);//使能内部高速晶振(HSI)
        while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功
       
        RCC_HCLKConfig(RCC_SYSCLK_Div1);                         //配置AHB(HCLK)时钟=SYSCLK
        RCC_PCLKConfig(RCC_HCLK_Div1);                                 //配置APB(PCLK)钟=AHB时钟
               
        FLASH_SetLatency(FLASH_Latency_1);                    //设置FLASH延时周期数为1
        FLASH_PrefetchBufferCmd(ENABLE);                //使能FLASH预取缓存
       
        /* 选择锁相环(PLL)时钟源为HSI 2分频,倍频数为12,则PLL输出频率为 4MHz * 12 = 48MHz */
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);       
        RCC_PLLCmd(ENABLE);                        // 使能PLL
       
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL输出稳定
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                    //选择PLL作为系统时钟
        while(RCC_GetSYSCLKSource() != 0x08);                                //等待PLL成为SYSCLK时钟源
        //  0x00:HSI 作为系统时钟   
    //  0x04:HSE作为系统时钟   
    //  0x08:PLL作为系统时钟
}
这是串口1配置过程
/*========设置UART1Tx和RxGPIO==========*/
void USART1_GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);  
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
       
        GPIO_Init(GPIOA, &GPIO_InitStructure);  

}
/*==============设置USART1=================*/
void USART1_Configuration(void)
{       
        USART_InitTypeDef USART_InitStructure;       


        USART1_GPIO_Configuration();
       
        USART_InitStructure.USART_BaudRate = 9600;                  //设定传输速率
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//设定传输数据位数
        USART_InitStructure.USART_StopBits = USART_StopBits_1;                //设定停止位个数
        USART_InitStructure.USART_Parity = USART_Parity_No;                        //不用校验位
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不用流量控制
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使用接收和发送功能
        USART_Init(USART1, &USART_InitStructure);//初始化USART1
               
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  //使能USART1接收中断
        USART_Cmd(USART1, ENABLE);                       //使能USART1
//        USART_ClearFlag(USART1,USART_FLAG_TC);       

}
求指点调试两天了没反应,示波器看了一下TX引脚电平,没反应

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。