专栏中心

EEPW首页 > 专栏 > 常用编程

常用编程

发布人:0750long 时间:2010-02-11 来源:工程师 发布文章
常用编程

 

 

#include "stm32f10x_lib.h"//把库包含进去

 


void Delay(vu32 z) //1ms延时函数
{
 vu32 x,y;
   for(x=z;x>0;x--)
   for(y=1595;y>0;y--);
}

 
 


//常用时钟设置:
void RCC_Configuration(void)
{
 
  RCC_DeInit(); //将外设 RCC寄存器重设为缺省值(即默认值)
  RCC_HSEConfig(RCC_HSE_ON);//打开外部晶振
  if(RCC_WaitForHSEStartUp() == SUCCESS) //判断起振是否成功
  {
    RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟(HCLK)(这时设置为=系统时钟)
    RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(HCLK2)(这时设置为=HCLK)  
    RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHV时钟(HCLK1)(这时设置为=HCLK/2)
    FLASH_SetLatency(FLASH_Latency_2);//设置 FLASH存储器延时时钟周期数。(设置为延时2个时钟周期)  
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能预取指缓存  
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//PLL的时钟来源及倍频的倍数 
    RCC_PLLCmd(ENABLE);//使能PLL  
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //检测PLL是否就绪      
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置PLL为系统时钟
    while(RCC_GetSYSCLKSource() != 0x08); //检测系统的时钟源是否是PLL
  }  
  /*这不用来打开要用到的外设的时钟*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);//使能USART GPIOA时钟
}

 

常用中断初始化
void NVIC_init()//中断初始化

  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//选择相应的中断分组
  NVIC_InitStructure.NVIC_IRQChannel =EXTI3_IRQChannel;//选择相应的中断通道(这就是要开的中断也就决定了你中断函那)
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占式中断的优先级设置
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应式中断的中断优先级设置
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
  NVIC_Init(&NVIC_InitStructure);
}


端口的位初始化:
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化结构体
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;  //选择引脚0,1 (选择相应的管脚)
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50M(设置输出的频率)
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出 (设置为何种输出或何种输入)
 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA0,1引脚

 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3; //选择引脚3
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输入频率最大50M
 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA3引脚 
}
整个端口的初始化:
void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化结构体
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;  //选择A口的所以管脚 (选择相应的管脚)
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50M(设置输出的频率)
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出 (设置为何种输出或何种输入)
 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA口 
}


端口的位操作:
 GPIO_SetBits(GPIOA, GPIO_Pin_1);//PA1=1 给PA1口写1
 GPIO_ResetBits(GPIOA, GPIO_Pin_1);//PA1=0给PA1口写0
 a=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)//读PA1口的值赋给a
 
端口操作:
 GPIO_Write(GPIOA, 0x0001);//给PA口写值;
 a = GPIO_ReadInputData(GPIOA); //读PA口的值赋给a

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

借助创新技术提升气候韧性

国际视野 2025-08-05

马斯克担忧失去对特斯拉的控制权

2025-08-05

美光发布 G9 NAND SSD 用于人工智能,发送全球首款 PCIe Gen6 NVMe 样品

960 颗类脑芯片,浙大「悟空」出世

最新ARM技术和嵌入式技术发展动态 上

视频 2009-10-22

手机装上HBM,会怎样?

网络与存储 2025-08-05

库克表示苹果必将把握AI机遇,相信依旧能够引领市场

2025-08-05

PCB封装详解

资源下载 2007-02-09

据报道英伟达本月计划在中国削减 RTX 50 系列价格因销量疲软

安森美公布2025年第二季度财报

银河麒麟携手研华,构建基于瑞芯微国产化解决方案

最新ARM技术和嵌入式技术发展动态 下

视频 2009-10-22

WinCE+ARM开发及关键技术 上

视频 2009-10-22

美国利用微软系统漏洞对我国防军工领域实施网络窃密攻击

2025-08-05

最新ARM技术和嵌入式技术发展动态 中

视频 2009-10-22

基于ARM的嵌入式Linux系统开发 下

视频 2009-10-22
更多 培训课堂
更多 焦点
更多 视频

技术专区