STM32F1系列之常用外设说明
扫描二维码
随时随地手机看文章
1、RCC相关:
APB2启动时钟项:
RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,
RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,
RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,
RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,
RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
RCC_APB2Periph_ALL
APB2启动函数:
RCC_APB2PeriphClockCmd(XX,ENABLE);
APB1启动时钟项:
RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,
RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,
RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,
RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4,
RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,
RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP,
RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_ALL
APB1启动函数:
RCC_APB2PeriphClockCmd(XX,ENABLE);
AHB启动时钟项:
RCC_AHBPeriph_DMA1
RCC_AHBPeriph_DMA2
RCC_AHBPeriph_SRAM
RCC_AHBPeriph_FLITF
RCC_AHBPeriph_CRC
RCC_AHBPeriph_FSMC
RCC_AHBPeriph_SDIO
AHB启动函数:
RCC_AHBPeriphClockCmd (XX,ENABLE);
GPIO模式:
GPIO_Mode_AIN:模拟输入 GPIO_Mode_IN_FLOATING:浮空输入
GPIO_Mode_IPD:下拉输入 GPIO_Mode_IPU:上拉输入
GPIO_Mode_Out_OD:开漏输出 GPIO_Mode_Out_PP:推挽输出
GPIO_Mode_AF_OD:复用开漏输出 GPIO_Mode_AF_PP:复用推挽输出
GPIO速度:
GPIO_Speed_2MHz
GPIO_Speed_10MHz
GPIO_Speed_50MHz
GPIO引脚声明:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x; x:1~15或者all
GPIO初始化函数:
GPIO_Init(GPIOx, &GPIO_InitStructure); x:A~G
注:需要定义GPIO结构体变量,GPIO_InitTypeDef GPIO_InitStructure;
最好需要重新初始化:ADC_DeInit(ADCx);
ADC工作模式选择:
ADC_Mode_Independent:独立工作
ADC_Mode_RegInjecSimult:混合同步+注入同步
ADC_Mode_RegSimult_AlterTrig:混合同步+交替触发
ADC_Mode_InjecSimult_FastInterl:混合同步+快速交替
ADC_Mode_InjecSimult_SlowInterl:混合同步+慢速交替
ADC_Mode_InjecSimult:注入同步
ADC_Mode_RegSimult:规则同步
ADC_Mode_FastInterl:快速交替
ADC_Mode_SlowInterl:慢速交替
ADC_Mode_AlterTrig:交替触发
通过ADC_InitStructure.ADC_Mode = XX进行赋值
ADC扫描使能:
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC连续/单次模式选择:
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC转换控制方式:
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//有软件控制转换
ADC数据对齐方式:ADC_DataAlign_Right:右对齐/ ADC_DataAlign_Right:左对齐
ADC_InitStructure.ADC_DataAlign =XX
ADC转换通道数:
ADC_InitStructure.ADC_NbrOfChannel = X // X=1~16
ADC初始化函数:
ADC_Init(ADCx, &ADC_InitStructure);
注:在开始要定义结构体变量 ADC_InitTypeDef ADC_InitStructure
是否使能ADCx DMA:
ADC_DMACmd(ADCx, ENABLE);
使能ADCx:
ADC_Cmd(ADCx, ENABLE);
初始化ADC1校准寄存器:
ADC_ResetCalibration(ADCx);
检测ADC1校准寄存器初始化是否完成:
while(ADC_GetResetCalibrationStatus(ADCx));
开始校准ADC1:
ADC_StartCalibration(ADCx);
检测是否完成校准:
while(ADC_GetCalibrationStatus(ADCx));
ADC1转换软件启动:
ADC_SoftwareStartConvCmd(ADCx, ENABLE);
复位通道:
DMA_DeInit(DMAy_Channelx);//复位DMAy通道x,y=1时,x=1~7;y=2时,x=1~5
定义外设基地址,全局变量:
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//地址自己定义
如:#define ADC1_DR_Address ((u32)0x4001244C)
定义DMA存储器地址,全局变量u32
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; //定义DMA通道存储器地址
如:volatile unsigned short int ADC_ConvertedValue[8];
DMA外设方向:
DMA_InitStructure.DMA_DIR = XX;
DMA_DIR_PeripheralSRC:外设为数据传输的来源,DMA_DIR_PeripheralDST:外设为数据传输的目的地
DMA传输数量寄存器值,即缓存大小,单位由MemoryDataSize或PeripheralDataSize决定:
DMA_InitStructure.DMA_BufferSize = x;
//定义DMA缓冲区大小x,如8通道ADC,则x就为8
DMA外设地址寄存器变不变:
DMA_InitStructure.DMA_PeripheralInc = x;
DMA_PeripheralInc_Disable:外设地址寄存器不变DMA_PeripheralInc_Enable:外设地址寄存器递增
DMA内存地址寄存器变不变:
DMA_InitStructure.DMA_MemoryInc = X;
DMA_MemoryInc_Disable:内存地址寄存器不变DMA_MemoryInc_Enable:内存地址寄存器递增
外设数据宽度:
DMA_InitStructure.DMA_PeripheralDataSize = X;
DMA_PeripheralDataSize_Byte 数据宽度为8位