一不小心把模拟IIC放到OSCIN和OSCOUT脚上了,现在来说一下怎么把这两个脚当成普通IO来使用:

首先这两个引脚是时钟引脚,于是我们先要把外部时钟关闭,改用内部的时钟。

也就是把HSE关闭,使用HSI。stm32的时钟初始化函数如下:

/** @addtogroup STM32F10x_System_Private_Functions* @{*/
void RCC_Configuration(void)
{RCC_DeInit();                                           //重设RCC寄存器为缺省值RCC_HSICmd(ENABLE);                                      //使能HSI内部高速晶振while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);        //等待使能成功//配置AHB时钟频率与系统时钟频率一致    RCC_HCLKConfig(RCC_SYSCLK_Div1);  //配置APB1低速时钟频率为AHB时钟频率的1/2                        RCC_PCLK1Config(RCC_HCLK_Div2);  //配置APB2高速时钟频率与AHB时钟频率一致                      RCC_PCLK2Config(RCC_HCLK_Div1);  //配置ADC时钟频率为APB2时钟频率的1/4RCC_ADCCLKConfig(RCC_PCLK2_Div4);                      //将内部晶振时钟2分频后作为PLL时钟源,倍频系数为10(即系统时钟为40MHz)  8MHz/2*10=40MHzRCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_10);   //使能PLL(如果PLL被用于系统时钟,那么它不能被失能)                RCC_PLLCmd(ENABLE);     //等待指定的RCC标志位设置成功,等待PLL初始化成功while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);              //以PLL时钟作为系统时钟源//0x00:HSI作为系统时钟//0x04:HSE作为系统时钟//0x08:PLL作为系统时钟while(RCC_GetSYSCLKSource() != 0x08);                   //等待PLL时钟成功作为系统时钟源
}/*** @brief  Setup the microcontroller system*         Initialize the Embedded Flash Interface, the PLL and update the *         SystemCoreClock variable.* @note   This function should be used only after reset.* @param  None* @retval None*/
void SystemInit (void)
{/* Reset the RCC clock configuration to the default reset state(for debug purpose) *//* Set HSION bit */RCC->CR |= (uint32_t)0x00000001;/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CLRCC->CFGR &= (uint32_t)0xF8FF0000;
#elseRCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */   /* Reset HSEON, CSSON and PLLON bits */RCC->CR &= (uint32_t)0xFEF6FFFF;/* Reset HSEBYP bit */RCC->CR &= (uint32_t)0xFFFBFFFF;/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */RCC->CFGR &= (uint32_t)0xFF80FFFF;#ifdef STM32F10X_CL/* Reset PLL2ON and PLL3ON bits */RCC->CR &= (uint32_t)0xEBFFFFFF;/* Disable all interrupts and clear pending bits  */RCC->CIR = 0x00FF0000;/* Reset CFGR2 register */RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/* Disable all interrupts and clear pending bits  */RCC->CIR = 0x009F0000;/* Reset CFGR2 register */RCC->CFGR2 = 0x00000000;
#else/* Disable all interrupts and clear pending bits  */RCC->CIR = 0x009F0000;
#endif /* STM32F10X_CL */#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)#ifdef DATA_IN_ExtSRAMSystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM */
#endif /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers *//* Configure the Flash Latency cycles and enable prefetch buffer */
//  SetSysClock();RCC_Configuration();
#ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#elseSCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}

SystemInit函数是在进main函数之前就调用了的,因此进入main函数后就不用再调用了,直接编写自己的程序即可。

void ALL_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE );RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE );  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试GPIO_PinRemapConfig(GPIO_Remap_PD01, ENABLE);           //OSCIN和OSCOUT重映射为PD0、PD1GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  //端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;       //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //50Mhz速度GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;    //端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;       //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //50Mhz速度GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_SetBits(GPIOD,GPIO_Pin_0);//SDA输出高  GPIO_SetBits(GPIOD,GPIO_Pin_1);//SCL输出高
}int main()  //进入main函数前,时钟就初始化完成了,此时主频是40M
{   ALL_GPIO_Init();while(1){}
}

由手册可知,OSCIN和OSCOUT作为PD0和PD1是它的重映射功能,因此打开该功能即可。

 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE );  GPIO_PinRemapConfig(GPIO_Remap_PD01, ENABLE);           //OSCIN和OSCOUT重映射为PD0、PD1

STM32的晶振脚(OSCIN和OSCOUT)当成普通IO来使用相关推荐

  1. STM32的晶振,时钟稳定性要重视

    最近看了不少网上网友的应用案例,在STM32晶振问题上不少都栽了跟头.我自己也碰见过一次.就是电容值搞错了. ourdev有网友说:他的设备隔几天系统就出问题,系统时钟变慢. ------------ ...

  2. STM32外部晶振8M更改为25M

    注:修改F4去stm32f4xx.h/system_stm32f4xx.c , 修改F3去stm32f10x.h/system_stm32f10x.c 修改的地方之一:stm32f4xx.h里面的HS ...

  3. (转载)STM32 外部晶振电路设计和匹配

    (转载来自:https://blog.csdn.net/Seaman_TY/article/details/93090532) STM32的时钟源 STM32F103有两种主时钟方案,一个是依靠内部R ...

  4. 当手头上没有示波器,如何通过代码测试stm32外部晶振是否工作

    1.首先查看stm32手册,可以知道有一个时钟控制寄存器(RCC_CR),在该寄存器中,第16位和第0位和25位和24位分别为: HSEON:外部高速时钟使能 (External high-speed ...

  5. 知乎大神深入解析:单片机晶振脚原理是什么?

    关注.星标公众号,直达精彩内容 XTAL1和XTAL2指的是8051系单片机上常见的用于接"晶振"(晶体谐振器-Crystal Resonator")的两个引脚.从原理上 ...

  6. 晶振对stm32 串口数据传输的影响

    2019独角兽企业重金招聘Python工程师标准>>> 一般stm32 外部晶振是8M的,但是如果你要改外部晶振的话,需要把配置文件也改下 如图位置,把8000000改为 16000 ...

  7. stm32启用内部晶振(stm32设置外部晶振)

    STM32中的晶振电路有什么作用 stm32  有两个可接入的外部晶振,自己内部也有低俗的晶振.举个例子,手册也有说明低速主要给RTC使用了,高速是给一些外设及内核提供时钟元,内部的主要是给看门狗用或 ...

  8. STM32使用内部RC振荡器作为系统时钟开发项目--内晶振启动模板工程

    STM32使用内部RC振荡器时,OSC32_IN,OSC32_OUT接法: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空. 2)对于少于100脚的产品,有2种接法:   ...

  9. 4脚无源晶振与有源晶振

    无源晶振与有源晶振 什么是晶振 4脚有源晶振 4脚无源晶振 什么是晶振 常说的晶振,是石英晶体元器件中的一种.石英晶体谐振器.石英晶体振荡器.石英晶体滤波器均为石英晶体元器件.石英晶体是一种压电晶体. ...

最新文章

  1. 什么是JVM内存模型
  2. 浏览器兼容--条件样式,选择符前缀,样式属性前缀(转)
  3. python之路day5_Python语言之python之路笔记day19
  4. 水平集与图割算法浅析
  5. SAP License:你是怎么理解ERP的?
  6. 12月25日服务器例行维护公告,12月25日维护公告 技能修改测试
  7. 麦肯锡用 160 页报告告诉我们:13 年后 8 亿人的饭碗会被机器人抢了
  8. mysql 无法启动时,或尝试mysqld_safe --user=root
  9. 计算机保研英语,计算机专业保研面试英语自我介绍
  10. oracle安装最后一步完成了就消失了_Oracle安装过程中遇到的一些问题及解决方案...
  11. 《致云雀》(英)雪莱
  12. mysql 正则 捕获_在mysql中模拟正则表达式捕获组
  13. 代码审计工具学习之Seay(安装以及初步认识)
  14. MATLAB 指定线型和颜色
  15. MFC隐藏窗口及图标
  16. 此电脑创建桌面快捷方式
  17. Android sqlite执行insert,英文单引号报错问题的解决
  18. kafka-topics.sh 详细说明
  19. word表格合并单元格后,光标居中
  20. python 英语翻译_python 中英文翻译

热门文章

  1. 单一窗口关区备案_【干货】上海国际贸易单一窗口货物申报对接版(信天翁)“两段准入” 操作手册...
  2. android xutils3.0获取服务器图片,Android端使用xUtils3.0实现文件上传
  3. 不用精子就能繁育后代,科学家只用1个卵细胞就培育出健康小鼠,来自上交医学院 | PNAS...
  4. 机器人组团到城市打工,第一站果然是赛博朋克城
  5. UCLA教授遭到举报后被停课!原因竟是不同意学生主张的“考试放水”
  6. 模型仅1MB,更轻量的人脸检测模型开源,效果不弱于主流算法
  7. qs.parse()、qs.stringify()使用方法
  8. 【Lv1-Lesson002】He and She
  9. 微信小程序开发-笔记
  10. 看看10万程序员怎么评论:零基础的前端开发该如何系统地学习?