static void SetSysClock(void)
{
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
//需要修改的关键地方,一定一定。。。。
//RCC->CR |= ((uint32_t)RCC_CR_HSEON);
RCC->CR &= ~((uint32_t)RCC_CR_HSEON);
do
{
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC->CR & RCC_CR_HSERDY) != RESET)
{
HSEStatus = (uint32_t)0x01;
}
else
{
HSEStatus = (uint32_t)0x00;
}
if (HSEStatus == (uint32_t)0x01)
{
FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);
RCC->CR |= RCC_CR_PLLON;
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
{
}
}
else
{
}
}
关键字:STM32F030 内部晶振 普通IO
引用地址:
STM32F030 使用内部晶振,PF0与PF1作普通IO使用
推荐阅读最新更新时间:2024-03-16 16:17
STM32F030 使用引脚输入
GPIO_InitTypeDef GPIO_InitStructure; /* Enable the BUTTON Clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); /* Configure Button pin as input */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_
[单片机]
STM8学习笔记---普通IO口模拟串口功能
串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能。 要模拟串口首先要清楚串口数据传输过程中的原理。 常用的串口格式为 1位起始位,8位数据位,无校验位,1位结束位。起始位为低电平,结束位为高电平。数据0为低电平,数据1为高电平。 所以最简单的串口传输一个字节总共有10个电平变化,每个电平的宽度由波特率决定的。 具体的串口数据分析,可以参考这篇文章:STM8学习笔记---通过示波器分析串口数据。 下面看一个通过波特率如何计算每个位的电平宽度。 发送一个字节,以stm8中9600bit/s的波特率计算的过程为例(1秒钟传输
[单片机]
STM32F030控制LED
(1)hardware_conf.h函数中: #define NETLED(tmp) GPIOA- ODR=tmp?(GPIOA- ODR|1 4):(GPIOA- ODR&(~(1 4))) //上网指示灯 #define DOORLED(tmp) GPIOA- ODR=tmp?(GPIOA- ODR|1 12):(GPIOA- ODR&(~(1 12))) //开门指示灯 #define MENCI(tmp) GPIOA- ODR=tmp?(GPIOA- ODR|1 11):(GPIOA- ODR&(~(1 11))) //门磁指示灯 (2)main函数中: void main(void) { NE
[单片机]
【STM32F103攻城笔记】内部晶振HSI倍频设置系统时钟
首先说明,因为STM32芯片的型号不同,所以对于不同芯片有不同频率的限制,比如某些时钟频率不能大于多少,这是根据手册来设置的!但改变频率的寄存器都一样,只是我们设置频率大小要受芯片的限制!下面我用的芯片型号是STM32F103VBT6!它就限制了内部晶振的倍频不能大于64MHz(但其实我实验出来是52MHz)! 本文是利用内部晶振(HSI)来倍频,与外部晶振倍频区分开! 第一步:打开system_STM32f10x.c,找到函数void SystemInit (void){},把原有的都注释掉,将下面的代码复制进去: /* 开启HSI 即内部晶振时钟 */ RCC- CR |= (uint32_t)0x
[单片机]
最新的MSP430普通IO模拟IIC程序!
#include GLOBAL.h #include stdlib.h #include stdbool.h #include msp430x41x.h //------------------------------------------ #define IicWpDirOut P6DIR |= BIT5 #define IicWpLow P6OUT &=~ BIT5 #define IicWpHig P6OUT |= BIT5 #define IicSclDirOut P6DIR |= BIT6 #define IicSclLow P6OUT &=~ BIT6
[单片机]
51单片机普通IO口模拟串口源程序
大家放心用,但是你们程序要好好看看,容易中断冲突,现在我们也在解决中,接收和发送字符串的程序有需要的邮箱给你们发送过去 东西是好东西,我们遇到了中断问题,有点麻烦,数据采集上来后用模拟串口挂到485总线,向一个控制单片机发送数据,用12864显示,但是控制单片机的串口通信的中断和模拟串口中断冲突,上位机和下位机没有办法通信,今天下午实在没有办法了,又做了一块单片机最小系统,让采集板上的数据之间和这块最小系统板进行通信12864上显示,现在还没有想到好的解决办法,等解决之后再告诉大家,还有就是接受字符串的时候,先进行解包,再进行标识位检测,这个程序发程序的方法是一个一个字符发送的,接收的时候要先放进数组里面,要是有需要的可以单独联系
[单片机]
怎样辨别单片机的内部晶振与外部晶振
单片机的外部晶振稳定,受温度,湿度等环境因素影响比内部振荡器小,精度比较高。而且当设计需要降低功耗时,比如说便携式仪表等,就需要外设晶振,因为内部振荡器不能根据需要停止,而外部晶振可以适时停止,从而进入休眠状态,降低功耗。 而单片机的内部晶振一般不够准确,误差比较大。但是单片机的内部晶振和外部晶振的作用都是一样的,给系统提供时钟。如果对频率要求不高的话(比如不涉及串口通信和精确定时等的话),用内部晶振就足够了,并且这样成本还低。内部时钟,频率受温度等其它影响,但是能省下晶振的钱,还有2个I/O.所以,如果对频率要求不高,一般是优先选用内部振荡。 假如你想要省电,用了SLEEP,那你就不能用内部振荡了,内部振荡回停止!
[单片机]
stm32f103系列芯片JTAG口当做普通IO使用
使用的芯片是stm32f103c8t6. 今天在调试板子时发现在PA15口上的LED灯无论输出高还是低都只有一个中间电平2.3V,后来百度说这个口(PA15--JTDI)默认用作JTAG调试口,需要配置下成普通IO口,于是按照那人的办法写了2句:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); 不写还好,一写呵呵哒,结果连原本用来下载、调试程序用的SWD口都不能用了。。。后来在STM32库中找到了正确的写法:RCC_APB2PeriphClockCmd(RCC_APB2Peri
[单片机]