完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一不小心把模拟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/4 RCC_ADCCLKConfig(RCC_PCLK2_Div4); //将内部晶振时钟2分频后作为PLL时钟源,倍频系数为10(即系统时钟为40MHz) 8MHz/2*10=40MHz RCC_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_CL RCC->CFGR &= (uint32_t)0xF8FF0000; #else RCC->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_ExtSRAM SystemInit_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_SRAM SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ #else SCB->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、PD1 GPIO_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 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1758 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1055 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1931浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
722浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
563浏览 3评论
590浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
548浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 04:24 , Processed in 0.753214 second(s), Total 75, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号