系列索引:《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理
目录
GPIO常用库函数(引脚的选择、工作模式、速度的设置及引脚的置位、复位与数据的读取)
定时器相关库函数的使用(arr,psc及ccr值的设置,定时器中断的使用)
ADC常用库函数(主要包括注入、规则通道的设置及转换数据的读取、中断的使用)
USART相关库函数(初始化结构体变量的设置、发送与接收数据、中断相关)
I2C常用库函数(初始化设置、起始与停止条件生成、收发数据集中断)
GPIO常用库函数(引脚的选择、工作模式、速度的设置及引脚的置位、复位与数据的读取)
所有GPIO引脚,使用前必须先打开其所属端口时钟。
常用库函数
GPIO_Init:根据GPIO_InitStruct中指定的参数初始化GPIOx端口;
GPIO_SetBits:将指定的GPIO端口的一个或多个指定引脚置位;
GPIO_ResetBits: 将指定的GPIO端口的一个或多个指定引脚复位;
GPIO_ReadOutputDataBit:读取指定GPIO端口的指定引脚的输出值(1 bit);
GPIO_ReadInputDataBit:读取指定GPIO端口的指定引脚的输入值(1 bit);
GPIO初始化过程及使用方式
初始化连接LED0的PA8引脚
——打开APB2总线上GPIOA端口的时钟
/* Enable GPIO_LED0 clock */
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_GPIOA,
ENABLE);
初始化连接LED0的PA8引脚
——将PA8引脚设置为推挽输出模式
/* GPIO_LED0 Pin(PA8) Configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
开启或关闭LED灯
LED_On(void){
GPIO_ResetBits(GPIOA,GPIO_Pin_8)
}
LED_Off(void){
GPIO_SetBits(GPIOA,GPIO_Pin_8)
}
初始化连接按键KEY0的PC5引脚
——打开APB2总线上GPIOC端口的时钟
/* Enable GPIO_KEY0 clock */
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_GPIOC,
ENABLE);
初始化连接按键KEY0的PC5引脚
——将PC5引脚设置为输入上拉模式
/* GPIO_KEY0 Pin(PC5) Configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
检测按键输入key0
Unsigned int Key0_Read(void){
if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5))
return 1;
else
return 0;
}
GPIO设置-void key_Init_Row(void)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(KEY_ROW_GPIO_CLK,ENABLE);//使能时钟
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//通用推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=KEY_ROW_GPIO_PIN1|KEY_ROW_GPIO_PIN2|KEY_ROW_GPIO_PIN3|KEY_ROW_GPIO_PIN4;
GPIO_Init(KEY_ROW_GPIO_PORT,&GPIO_InitStructure);
#define KEY_ROW_GPIO_CLK RCC_APB2Periph_GPIOE
#define KEY_ROW_GPIO_PORT GPIOE
GPIO设置
RCC_APB2PeriphClockCmd(KEY_LIST_GPIO_CLK,ENABLE);//使能时钟
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //下拉输入
GPIO_InitStructure.GPIO_Pin=KEY_LIST_GPIO_PIN1|KEY_LIST_GPIO_PIN2|KEY_LIST_GPIO_PIN3|KEY_LIST_GPIO_PIN4;
GPIO_Init(KEY_LIST_GPIO_PORT,&GPIO_InitStructure);
GPIO_SetBits(KEY_ROW_GPIO_PORT,KEY_ROW_GPIO_PIN1|KEY_ROW_GPIO_PIN2|KEY_ROW_GPIO_PIN3|KEY_ROW_GPIO_PIN4); //将引脚置为高电平
#define KEY_LIST_GPIO_CLK RCC_APB2Periph_GPIOF
#define KEY_LIST_GPIO_PORT GPIOF
按键扫描
if(GPIO_ReadInputDataBit(KEY_LIST_GPIO_PORT,KEY_LIST_GPIO_PIN1)==1)
{
SysTick_Delay_ms(10); //软件“消抖”
if(GPIO_ReadInputDataBit(KEY_LIST_GPIO_PORT,KEY_LIST_GPIO_PIN1)==1)
{
key_Init_List();
if(GPIO_ReadInputDataBit(KEY_ROW_GPIO_PORT,KEY_ROW_GPIO_PIN1)==1)
return 1;
else if(GPIO_ReadInputDataBit(KEY_ROW_GPIO_PORT,KEY_ROW_GPIO_PIN2)==1)
return 4;
else if(GPIO_ReadInputDataBit(KEY_ROW_GPIO_PORT,KEY_ROW_GPIO_PIN3)==1)
return 7;
else if(GPIO_ReadInputDataBit(KEY_ROW_GPIO_PORT,KEY_ROW_GPIO_PIN4)==1)
return '*';
}
}
定时器相关库函数的使用(arr,psc及ccr值的设置,定时器中断的使用)
TIM_TimeBaseInit:根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx。
TIM_OC1Init:根据TIM_OCInitStruct中指定的参数初始化外设 TIMx的通道1。
TIM_OC2Init:根据TIM_OCInitStruct中指定的参数初始化外设 TIMx的通道2。
TIM_OC3Init:根据TIM_OCInitStruct中指定的参数初始化外设 TIMx的通道3。
TIM_OC4Init:根据TIM_OCInitStruct中指定的参数初始化外设 TIMx的通道4。
TIM_OC1PreloadConfig:使能或者禁止TIMx在CCR1上的预装载寄存器。
TIM_OC2PreloadConfig:使能或者禁止TIMx在CCR2上的预装载寄存器。
TIM_OC3PreloadConfig:使能或者禁止TIMx在CCR3上的预装载寄存器。
TIM_OC4PreloadConfig:使能或者禁止TIMx在CCR4上的预装载寄存器。
TIM_ARRPreloadConfig:使能或者禁止TIMx在ARR上的预装载寄存器。
TIM_CtrlPWMOutputs:使能或禁止TIMx的主输出。
TIM_Cmd:使能或者禁止TIMx。
初始化输入捕获通道。调用函数:TIM_ICInit();
TIM_GetFlagStatus:检查指定的TIMx标志位的状态。
TIM_ClearFlag:清除 TIMx 的待处理标志位。
TIM_ITConfig:使能或者禁止指定的TIMx中断。
TIM_GetITStatus:检查指定的TIMx中断是否发生。
TIM_ClearITPendingBit:清除TIMx的中断挂起位。
中断相关库函数(中断通道、优先级分组的设置)
NVIC_DeInit:将NVIC的寄存器恢复为复位启动时的默认值。
NVIC_PriorityGroupConfig:设置优先级分组。
NVIC_Init:根据NVIC_InitStruct中指定的参数初始化NVIC。
设置中断优先级
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置中断优先级组
/* Enable the TIM2_IRQn Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //设置TIM2_IRQn中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别,可取0-7
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
编写对应的中断服务程序
DMA的常用库函数(主要在初始化时结构体变量的设置)
DMA_DeInit:将DMAy的通道x的寄存器恢复为复位启动时的默认值。
DMA_Init:根据DMA_InitStruct中指定的参数初始化指定DMA通道的寄存器。
DMA_GetCurrDataCounter:返回当前指定DMA通道剩余的待传输数据数目。
DMA_Cmd:使能或者禁止指定的DMA通道。
DMA_GetFlagStatus:查询指定的DMA通道的标志位状态。
DMA_ClearFlag:清除指定的DMA通道的待处理标志位。
DMA_ITConfig:使能或禁止指定的DMA通道中断。
DMA_GetITStatus:查询指定DMAy的通道x的中断的状态。
DMA_ClearITPendingBit:清除DMAy的通道x的中断挂起位。
ADC常用库函数(主要包括注入、规则通道的设置及转换数据的读取、中断的使用)
ADC开始转换、结束转换和结果读取
USART相关库函数(初始化结构体变量的设置、发送与接收数据、中断相关)
USART_DeInit:将USARTx的寄存器恢复为复位启动时的默认值。
USART_Init:根据USART_InitStruct中指定的参数初始化指定USART的寄存器。
USART_Cmd:使能或禁止指定USART。
USART_SendData:通过USART发送单个数据。
USART_ReceiveData:返回指定USART最近接收到的数据。
USART_GetFlagStatus:查询指定USART的标志位状态。
USART_ClearFlag:清除指定USART的标志位。
USART_ITConfig:使能或禁止指定的USART中断。
USART_GetITStatus:查询指定的USART中断是否发生。
USART_ClearITPendingBit:清除指定的USART中断挂起位。
SPI的常用库函数(初始化设置、收发数据)
SPI_I2S_DeInit:将SPIx的寄存器恢复为复位启动时的默认值。
SPI_Init:根据SPI_InitStruct中指定的参数初始化指定SPI的寄存器。
SPI_Cmd:使能或禁止指定SPI。
SPI_I2S_SendData:通过SPI/I2S发送单个数据。
SPI_I2S_ReceiveData:返回指定SPI/I2S最近接收到的数据。
SPI_I2S_GetFlagStatus:查询指定SPI/I2S的标志位状态。
SPI_I2S_ClearFlag:清除指定SPI/I2S的标志位(SPI_FLAG_CRCERR)。
SPI_I2S_ITConfig:使能或禁止指定的SPI/I2S中断。
SPI_I2S_GetITStatus:查询指定的SPI/I2S中断是否发生。
SPI_I2S_ClearITPendingBit:清除指定的SPI/I2S中断挂起位(SPI_IT_CRCERR)。
I2C常用库函数(初始化设置、起始与停止条件生成、收发数据集中断)
I2C_DeInit:将I2Cx的寄存器恢复为复位启动时的默认值。
I2C_Init:根据I2C_InitStruct中指定的参数初始化指定I2C的寄存器。
I2C_Cmd:使能或禁止指定I2C。
I2C_GenerateSTART:产生I2Cx传输的起始信号。
I2C_Send7bitAddress:发送地址信息来选中指定的I2C从设备。
I2C_SendData:通过I2C发送单字节数据。
I2C_ReceiveData:返回指定I2C最近接收到的字节数据。
I2C_CheckEvent:查询I2Cx最近一次发生的事件是否是I2C_EVENT指定的事件。
I2C_AcknowledgeConfig:使能或者禁止指定I2C的应答功能。
I2C_GenerateSTOP:产生I2Cx传输的结束信号。
I2C_GetFlagStatus:查询指定I2C的标志位状态。
I2C_ClearFlag:清除指定I2C的标志位。
I2C_ITConfig:使能或禁止指定的I2C中断。
I2C_GetITStatus:查询指定的I2C中断是否发生。
I2C_ClearITPendingBit:清除指定的I2C中断请求挂起位。
I2C_DMACmd:使能或禁止指定I2C的DMA请求。