我是用内部的时钟的
下面是时钟函数
- void RCC_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_DeInit();//将外设 RCC寄存器重设为缺省值
-
- RCC_HSICmd(ENABLE);//使能HSI
- while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功
-
- RCC_HCLKConfig(RCC_SYSCLK_Div1);
- RCC_PCLK1Config(RCC_HCLK_Div1);
- RCC_PCLK2Config(RCC_HCLK_Div1);
- //RCC_ADCCLKConfig(RCC_PCLK2_Div6);
- //设置 PLL 时钟源及倍频系数
- //经过测试这里最多设置成RCC_PLLMul_13高了就会死机
- /*
- These bits represent the ratio of the SYSCLK (system clock) period to the Flash access
- time.
- 000 Zero wait state, if 0 < SYSCLK≤ 24 MHz
- 001 One wait state, if 24 MHz < SYSCLK ≤ 48 MHz
- 010 Two wait states, if 48 MHz < SYSCLK ≤ 72 MHz
- */
-
- /* Enable refetch Buffer */
- //FLASH->ACR |= FLASH_ACR_PRFTBE;
- /* Flash 2 wait state */
- //FLASH->ACR &= (u32)((u32)~FLASH_ACR_LATENCY);
- //FLASH->ACR |= (u32)FLASH_ACR_LATENCY_2;
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
- FLASH_SetLatency(FLASH_Latency_2);
-
- RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);//使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE
- RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能
- //等待指定的 RCC 标志位设置成功 等待PLL初始化成功
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
-
- //设置系统时钟(SYSCLK) 设置PLL为系统时钟源
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择想要的系统时钟
- //等待PLL成功用作于系统时钟的时钟源
- // 0x00:HSI 作为系统时钟
- // 0x04:HSE作为系统时钟
- // 0x08:PLL作为系统时钟
- while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来,RCC_SYSCLKSource_PLL
- /*
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- RCC_MCOConfig(RCC_MCO_HSI);
- */
- }
下面是串口的初始化
- //初始化IO 串口1
- //bound:波特率
- void uart_init(u32 bound){
- //GPIO端口设置
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE); //使能USART2,GPIOA时钟
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
- USART_DeInit(USART2);
- //USART2_TX PA.2
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
- GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9
-
- //USART2_RX PA.3
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
- GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA3
- //Usart2 NVIC 配置
- NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
- NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
-
- //USART 初始化设置
- USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
- 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(USART2, &USART_InitStructure); //初始化串口
- USART_ITConfig(USART2, USART_IT_TC, ENABLE);//开启中断
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断
- USART_Cmd(USART2, ENABLE); //使能串口
- }
|