GPIO编程套路
一、配置GPIO口
- 使能管脚对应的GPIO组时钟
RCC_APB2PeriphClockCmd( GPIOx, ENABLE); - 定义一个初始化结构体型的变量
GPIO_InitTypeDef GPIO_InitStructure; - 对结构体变量的各成员赋值
GPIO_InitStructure.GPIO_Pin =;
GPIO_InitStructure.GPIO_Mode =;
GPIO_InitStructure.GPIO_Speed =; - 调用初始化函数,初始化GPIO
GPIO_Init(GPIO_Pin_n, &GPIO_InitStructure);
二、在主函数中,调用GPIO函数编程。
UART编程套路
一、配置GPIO口及UART1口 (APB2, PA9, PA10管脚)
- 使能Tx、Rx管脚对应的GPIO组时钟,RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);
- 使能Tx、Rx管脚对应的UART时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_ UARTx, ENABLE);
- 定义一个GPIO初始化结构体型的变量和一个UART初始化结构体变量
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure; - 对GPIO初始化结构体变量的各成员赋值,设置GPIO为TX推挽复用输出模式,RX为浮空输入模式
GPIO_InitStructure.GPIO_Pin =; GPIO_InitStructure.GPIO_Mode =; GPIO_InitStructure.GPIO_Speed =; - 对UART初始化结构体变量各成员赋值,
USART_InitStructure.USART_BaudRate =; USART_InitStructure.USART_WordLength =; USART_InitStructure.USART_StopBits =; USART_InitStructure.USART_Parity =;USART_InitStructure.USART_Mode = - 调用初始化函数,初始化GPIO,GPIO_Init(GPIO_Pin_n, &GPIO_InitStructure);
- 调用初始化函数,初始化UART,USART_Init(USARTx, &USART_InitStructure);
- 配置串口中断优先级,使能串口中断,NVIC_Configuration(); USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
- 使能串口,USART_Cmd(DEBUG_USARTx, ENABLE);
二、在stm32f10x_it.c中编写UART中断程序:
USART1_IRQHandler
三、在主函数中,完成其他功能编程。
说明:
- 使用UART需要将GPIO口配置为复用模式。
- 使用UART需要同时打开GPIO口的时钟和UART的时钟。
- 如果使用UART中断,需要配置中断分组和中断优先级,并使能中断。
- 使用UART前,还需要使能UART串口通信。
- 单片机可以在程序中通过C标准库中的printf()函数向串口发送数据,但必须重定向到串口(因为C标准printf()函数是定向到屏幕,而不是串口)。
格式:
///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f) {
/* 发送一个字节数据到串口 */
USART_SendData(DEBUG_USARTx, (uint8_t) ch);
/* 等待发送完毕 */
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);
return (ch);
}
外部中断配置套路
①初始化GPIO
- 开启所有外部中断源管脚对应的GPIO时钟和AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx|RCC_APB2Periph_AFIO, ENABLE) - 定义GPIO初始化结构变量,
GPIO_InitTypeDef GPIO_InitStructure; - 赋值结构变量各成员
GPIO_InitStructure.GPIO_Pin=管脚号0~15 ; .mode= GPIO_Mode_IN_FLOATING(浮空输入); - 调用GPIO初始化函数:GPIO_Init(GPIO_PORT, & GPIO_InitStructure);
- 如果有多个中断源,重复步骤3~4。
②初始化NVIC;
- 设置优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_n); - 定义NVIC初始化结构变量,并赋值结构变量各成员
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel =中断号;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =抢占优先级; NVIC_InitStructure.NVIC_IRQChannelSubPriority =子优先级;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - 调用NVIC初始化函数。
NVIC_Init(&NVIC_InitStructure); - 如果有多个中断源,重复步骤2~3。
③初始化EXTI
- 定义EXTI初始化结构变量
EXTI_InitTypeDef EXTI_InitStructure; - 选择EXTI的信号源(PA~PG),设置外部中断配置寄存器AFIO_EXTICR相关位
GPIO_EXTILineConfig(GPIO_PORT, GPIO_PIN) - 赋值结构变量各成员
EXTI_InitStructure.EXTI_Line =信号源(0~15)
EXTI_InitStructure.EXTI_Mode =中断模式(中断/事件)
EXTI_InitStructure.EXTI_Trigger =触发方式(上升沿/下降沿) - 调用EXTI初始化函数
EXTI_Init(&EXTI_InitStructure);
如果有多个外部中断源,重复步骤2~4.
④编写中断服务函数。
中断服务函数中,为确保确实产生了中断请求,通常需要检查一下状态标识位确认确实产生了该中断。同时,为避免一次中断请求执行多次中断服务程序,中断服务程序最后需要清除该中断标识位。例如:
if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE) != RESET) //确保是否产生了EXTI Line中断
{…
EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE); //清除中断标志位
}
DMA编程套路
- 开启DMA控制器时钟:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
- 定义初始化结构体变量:DMA_InitTypeDef DMA_InitStructure;
- 赋值结构体各成员变量:
DMA_InitStructure.DMA_PeripheralBaseAddr =; // 设置DMA源地址
DMA_InitStructure.DMA_MemoryBaseAddr = ; // 设置内存地址
DMA_InitStructure.DMA_DIR = //DMA 方向
DMA_InitStructure.DMA_BufferSize = // 传输大小
DMA_InitStructure.DMA_PeripheralInc = // 外设地址增长方式
DMA_InitStructure.DMA_MemoryInc = // 内存地址增长方式
DMA_InitStructure.DMA_PeripheralDataSize = // 外设数据单位,8、16、32
DMA_InitStructure.DMA_MemoryDataSize = // 内存数据单位
DMA_InitStructure.DMA_Mode = // DMA模式,一次或者循环模式
DMA_InitStructure.DMA_Priority = // 优先级:低、中、高、最高
DMA_InitStructure.DMA_M2M = // 是否启用内存到内存的传输,ENABLE/DISABLE
- 调用初始化函数: DMA_Init(USART_TX_DMA_CHANNEL, &DMA_InitStructure);
- DMA使能: DMA_Cmd (USART_TX_DMA_CHANNEL,ENABLE);
- 外设开启DMA请求(外设控制寄存器DMA允许位使能)
定时器编程套路
NVIC初始化
1、定义NVIC初始化结构体变量
2、设置中断分组
3、赋值初始化变量各成员
4、调用NVIC初始化函数
TIMx初始化
1、定义TIMx初始化结构体变量
2、开启定时器内部时钟
3、赋值初始化结构体变量各成员
4、调用TIMx初始化函数
5、开启定时器中断
6、使能定时器
中断响应函数编程
来源:oschina
链接:https://my.oschina.net/u/4341660/blog/4326388