STM32F1系列之常用外设说明.docx
《STM32F1系列之常用外设说明.docx》由会员分享,可在线阅读,更多相关《STM32F1系列之常用外设说明.docx(12页珍藏版)》请在冰豆网上搜索。
![STM32F1系列之常用外设说明.docx](https://file1.bdocx.com/fileroot1/2023-1/4/a32ea546-f2c4-4e2e-bec3-29b30bd62b4a/a32ea546-f2c4-4e2e-bec3-29b30bd62b4a1.gif)
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);
2、GPIO相关:
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;
3、ADC相关
最好需要重新初始化:
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
是否使能ADCxDMA :
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);
4、DMA相关:
复位通道:
DMA_DeInit(DMAy_Channelx);//复位DMAy通道x,y=1时,x=1~7;y=2时,x=1~5
定义外设基地址,全局变量:
DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;//地址自己定义
如:
#defineADC1_DR_Address ((u32)0x4001244C)
定义DMA存储器地址,全局变量u32
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue;//定义DMA通道存储器地址
如:
volatileunsigned shortint 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位
DMA_PeripheralDataSize_Byte 数据宽度为8位
DMA_PeripheralDataSize_HalfWord 数据宽度为16位
DMA_PeripheralDataSize_Word 数据宽度为32位
存储器数据宽度:
DMA_InitStructure.DMA_MemoryDataSize=X;
DMA_MemoryDataSize_Byte 数据宽度为8位
DMA_MemoryDataSize_HalfWord 数据宽度为16位
DMA_MemoryDataSize_Word 数据宽度为32位
模式选择:
DMA_InitStructure.DMA_Mode=x;
DMA_Mode_Circular:
循环模式
DMA_Mode_Normal:
正常模式
通道软件优先级设置:
DMA_InitStructure.DMA_Priority=x;
DMA_Priority_VeryHigh 最高优先级
DMA_Priority_High 高优先级
DMA_Priority_Medium 中优先级
DMA_Priority_Low 低优先级
DMA内存到内存的传输使能:
DMA_InitStructure.DMA_M2M=x
DMA_M2M_Enable:
使能
DMA_M2M_Disable:
未使能
DMA初始化函数:
DMA_Init(DMAy_Channelx, &DMA_InitStructure);
DMA通道使能函数:
DMA_Cmd(DMAy_Channelx, ENABLE);//使能DMA通道1
注:
在开始要定义结构体变量 DMA_InitTypeDef DMA_InitStructure
5、NVIC相关:
优先级组设定:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x);
NVIC_PriorityGroup_0:
0bitsforpre-emptionpriority
4bitsforsubpriority
NVIC_PriorityGroup_1:
1bitsforpre-emptionpriority
3bitsforsubpriority
NVIC_PriorityGroup_2:
2bitsforpre-emptionpriority
2bitsforsubpriority
NVIC_PriorityGroup_3:
3bitsforpre-emptionpriority
1bitsforsubpriority
NVIC_PriorityGroup_4:
4bitsforpre-emptionpriority
0bitsforsubpriority
设置中断:
NVIC_InitStructure.NVIC_IRQChannel=x;
ADC1_2_IRQn= 18, /*!
USB_HP_CAN1_TX_IRQn=19, /*!
USB_LP_CAN1_RX0_IRQn=20, /*!
CAN1_RX1_IRQn=21, /*!
CAN1_SCE_IRQn=22, /*!
<=""p="">
EXTI9_5_IRQn=23, /*!
5]Interrupts*/
TIM1_BRK_IRQn=24, /*!
TIM1_UP_IRQn=25, /*!
TIM1_TRG_COM_IRQn=26, /*!
TIM1_CC_IRQn=27, /*!
TIM2_IRQn=28, /*!
TIM3_IRQn=29, /*!
TIM4_IRQn=30, /*!
I2C1_EV_IRQn=31, /*!
I2C1_ER_IRQn=32, /*!
I2C2_EV_IRQn =33, /*!
I2C2_ER_IRQn=34, /*!
SPI1_IRQn=35, /*!
SPI2_IRQn=36, /*!
USART1_IRQn=37, /*!
USART2_IRQn=38, /*!
USART3_IRQn =39, /*!
EXTI15_10_IRQn=40, /*!
10]Interrupts*/
RTCAlarm_IRQn=41, /*!
USBWakeUp_IRQn=42,/*!
TIM8_BRK_IRQn=43, /*!
TIM8_UP_IRQn=44, /*!
TIM8_TRG_COM_IRQn=45, /*!
TIM8_CC_IRQn=46, /*!
ADC3_IRQn=47, /*!
FSMC_IRQn=48, /*!
SDIO_IRQn=49, /*!
TIM5_IRQn=50, /*!
SPI3_IRQn=51, /*!
UART4_IRQn=52, /*!
UART5_IRQn=53, /*!
TIM6_IRQn=5
4, /*!
TIM7_IRQn=55, /*!
DMA2_Channel1_IRQn=56, /*!
DMA2_Channel2_IRQn=57, /*!
DMA2_Channel3_IRQn=58, /*!
DMA2_Channel4_5_IRQn=59, /*!
设置抢占优先级:
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=X; //抢占优先级 X
设置子优先级为:
NVIC_InitStructure.NVIC_IRQChannelSubPriority=X; //抢占优先级 X
使能中断:
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能
NVIC初始化函数:
NVIC_Init(&NVIC_InitStructure);
注:
在开始时需要定义结构体变量NVIC_InitTypeDefNVIC_InitStructure;
6、USART相关:
USART波特率选择:
USART_InitStructure.US