OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2809|回复: 2

求问时钟初始化配置有问题吗,求大佬看看

[复制链接]

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2016-9-7
在线时间
19 小时
发表于 2020-3-5 16:02:33 | 显示全部楼层 |阅读模式
20金钱
  1. void sys_Configuration(void)
  2. {
  3.     /* System Clocks Configuration */
  4.           RCC_Configuration();
  5.     /* USART1 配置模式为 115200 8-N-1,中断接收 */
  6.                 uart1_init(115200);
  7. //          uart2_init(9600);
  8.         /* GPIO 配置 */
  9. //          GPIO_Configuration();
  10. //          Adc_Init();  
  11. //                TIM2_Configuration();
  12.           
  13.        
  14.     /* 设置NVIC中断分组2:2位抢占优先级,2位响应优先级 */
  15.     NVIC_Configuration();
  16.     /*SysTick 配置*/
  17. //   SysTick_Init(); //10us中断
  18.    
  19.     //禁用JTAG功能
  20.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    //开启AFIO时钟
  21.     GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);      /*使能SWD 禁用JTAG*/
  22.             

  23.           //MagSetUp();
  24.                 //WKUP_Init();
  25.           //start_wwdg();
  26. }
复制代码
  1. //系统时钟配置
  2. void RCC_Configuration(void)
  3. {
  4.   
  5.                                 RCC_DeInit();//将外设RCC寄存器重设为缺省值
  6.                                
  7.                                 RCC_HSICmd(ENABLE);//使能HSI
  8.                                 while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET)  //等待HSI使能成功
  9.                                 {}
  10.         /* 使能flash预读取缓冲区 */
  11.       FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  12.         
  13.         /* 令Flash处于等待状态,2是针对高频时钟的,这两句跟RCC没直接关系,可以暂且略过 */
  14.         FLASH_SetLatency(FLASH_Latency_2);
  15.         
  16.         /* HCLK = SYSCLK 设置高速总线AHB的时钟为系统时钟*/
  17.         RCC_HCLKConfig(RCC_SYSCLK_Div1);                  
  18.         
  19.         /* PCLK2 = HCLK 设置低速总线2(APB2)时钟为高速总线时钟  注意这个值最大为72MHz*/
  20.         RCC_PCLK2Config(RCC_HCLK_Div1);
  21.         
  22.         /* PCLK1 = HCLK/2 设置低速总线1(APB1)的时钟为高速时钟的二分频   注意这个值最大为36MHz*/
  23.         RCC_PCLK1Config(RCC_HCLK_Div2);
  24.         
  25.         
  26.         /* Set PLL clock output to 72MHz using HSE (8MHz) as entry clock */
  27.         
  28.                         //设置PLL时钟源倍频系数
  29.                                 RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);   //内部晶振 (8/2)*2=8MHz,最大8MHz
  30.                                 RCC_PLLCmd (ENABLE);                  //使能PLL         
  31.         while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);        //Wait till PLL is ready      
  32.         /* Select PLL as system clock source 将锁相环输出设置为系统时钟 此时会真正产生系统时钟*/
  33.         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  34.         
  35.         /* Wait till PLL is used as system clock source 等待校验成功*/
  36.         while (RCC_GetSYSCLKSource() != 0x08);
  37.         
  38. //        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);        //选择外部时钟  HCLK/8
  39. //                                fac_us=SystemCoreClock/8000000;                                //为系统时钟的1/8  
  40. //                                fac_ms=(u16)fac_us*1000;                                        //非OS下,代表每个ms需要的systick时钟数
  41.         /* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
  42.         //使能外围接口总线时钟,注意各外设的隶属情况,不同芯片的分配不同,到时候查手册就可以
  43.         //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  44.                                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  45.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  46.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  47.                                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
  48.         //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
  49.         //                         RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |
  50.         //                         RCC_APB2Periph_AFIO, ENABLE);
  51.         //RCC_APB1PeriphClockCmd
  52.    
  53. }
复制代码
这是系统初始化相关的代码,这些完全是上一个项目移过来的,在STM32F103C8T6上使用完全没问题,然后换成STM32F103RCT6后下载程序就不能运行了(开机我让串口1发数据到串口助手看是否有运行),反复看这时钟配置并没有发现什么问题,有大佬看出来问题吗。



魔法棒我也改了, 微信截图_20200305155200.png 然后我尝试使用原子哥的标准库的程序下载发现可以运行正常, 微信截图_20200305155646.png 原子哥的程序写着是使用外部晶振,但是我的电路板并没有外接晶振,原子哥的程序为什么能运行?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2020-3-5 17:39:03 | 显示全部楼层
程序默认是先使用内部晶振,再去判断是否有接入外部晶振,没有接入的话就用内部晶振进行倍频
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2016-9-7
在线时间
19 小时
 楼主| 发表于 2020-3-9 15:49:16 | 显示全部楼层
找到原因了 微信截图_20200309154704.png 宏定义这个PA0之后就会不能运行,如果宏定义成其他引脚就不会,找到原因却不知道为什么,有大佬解惑吗。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-22 03:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表