原创 常用编程

2010-1-3 22:11 1492 4 4 分类: MCU/ 嵌入式

#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
 
 
 
   

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条