STM32F1学习笔记:keil编程套路整理

GPIO编程套路
一、配置GPIO口

  1. 使能管脚对应的GPIO组时钟
    RCC_APB2PeriphClockCmd( GPIOx, ENABLE);
  2. 定义一个初始化结构体型的变量
    GPIO_InitTypeDef GPIO_InitStructure;
  3. 对结构体变量的各成员赋值
    GPIO_InitStructure.GPIO_Pin =;
    GPIO_InitStructure.GPIO_Mode =;
    GPIO_InitStructure.GPIO_Speed =;
  4. 调用初始化函数,初始化GPIO
    GPIO_Init(GPIO_Pin_n, &GPIO_InitStructure);

二、在主函数中,调用GPIO函数编程。

UART编程套路
一、配置GPIO口及UART1口 (APB2, PA9, PA10管脚)

  1. 使能Tx、Rx管脚对应的GPIO组时钟,RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);
  2. 使能Tx、Rx管脚对应的UART时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_ UARTx, ENABLE);
  3. 定义一个GPIO初始化结构体型的变量和一个UART初始化结构体变量
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
  4. 对GPIO初始化结构体变量的各成员赋值,设置GPIO为TX推挽复用输出模式,RX为浮空输入模式
    GPIO_InitStructure.GPIO_Pin =; GPIO_InitStructure.GPIO_Mode =; GPIO_InitStructure.GPIO_Speed =;
  5. 对UART初始化结构体变量各成员赋值,
    USART_InitStructure.USART_BaudRate =; USART_InitStructure.USART_WordLength =; USART_InitStructure.USART_StopBits =; USART_InitStructure.USART_Parity =;USART_InitStructure.USART_Mode =
  6. 调用初始化函数,初始化GPIO,GPIO_Init(GPIO_Pin_n, &GPIO_InitStructure);
  7. 调用初始化函数,初始化UART,USART_Init(USARTx, &USART_InitStructure);
  8. 配置串口中断优先级,使能串口中断,NVIC_Configuration(); USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
  9. 使能串口,USART_Cmd(DEBUG_USARTx, ENABLE);

二、在stm32f10x_it.c中编写UART中断程序:
USART1_IRQHandler

三、在主函数中,完成其他功能编程。

说明:

  1. 使用UART需要将GPIO口配置为复用模式
  2. 使用UART需要同时打开GPIO口的时钟和UART的时钟。
  3. 如果使用UART中断,需要配置中断分组和中断优先级,并使能中断。
  4. 使用UART前,还需要使能UART串口通信。
  5. 单片机可以在程序中通过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

  1. 开启所有外部中断源管脚对应的GPIO时钟和AFIO时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx|RCC_APB2Periph_AFIO, ENABLE)
  2. 定义GPIO初始化结构变量,
    GPIO_InitTypeDef GPIO_InitStructure;
  3. 赋值结构变量各成员
    GPIO_InitStructure.GPIO_Pin=管脚号0~15 ; .mode= GPIO_Mode_IN_FLOATING(浮空输入);
  4. 调用GPIO初始化函数:GPIO_Init(GPIO_PORT, & GPIO_InitStructure);
  5. 如果有多个中断源,重复步骤3~4。

②初始化NVIC;

  1. 设置优先级分组
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_n);
  2. 定义NVIC初始化结构变量,并赋值结构变量各成员
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel =中断号;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =抢占优先级; NVIC_InitStructure.NVIC_IRQChannelSubPriority =子优先级;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  3. 调用NVIC初始化函数。
    NVIC_Init(&NVIC_InitStructure);
  4. 如果有多个中断源,重复步骤2~3。

③初始化EXTI

  1. 定义EXTI初始化结构变量
    EXTI_InitTypeDef EXTI_InitStructure;
  2. 选择EXTI的信号源(PA~PG),设置外部中断配置寄存器AFIO_EXTICR相关位
    GPIO_EXTILineConfig(GPIO_PORT, GPIO_PIN)
  3. 赋值结构变量各成员
    EXTI_InitStructure.EXTI_Line =信号源(0~15)
    EXTI_InitStructure.EXTI_Mode =中断模式(中断/事件)
    EXTI_InitStructure.EXTI_Trigger =触发方式(上升沿/下降沿)
  4. 调用EXTI初始化函数
    EXTI_Init(&EXTI_InitStructure);
    如果有多个外部中断源,重复步骤2~4.

④编写中断服务函数。
中断服务函数中,为确保确实产生了中断请求,通常需要检查一下状态标识位确认确实产生了该中断。同时,为避免一次中断请求执行多次中断服务程序,中断服务程序最后需要清除该中断标识位。例如:
if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE) != RESET) //确保是否产生了EXTI Line中断
{…
EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE); //清除中断标志位
}

DMA编程套路

  1. 开启DMA控制器时钟:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  2. 定义初始化结构体变量:DMA_InitTypeDef DMA_InitStructure;
  3. 赋值结构体各成员变量:
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
  1. 调用初始化函数: DMA_Init(USART_TX_DMA_CHANNEL, &DMA_InitStructure);
  2. DMA使能: DMA_Cmd (USART_TX_DMA_CHANNEL,ENABLE);
  3. 外设开启DMA请求(外设控制寄存器DMA允许位使能)

定时器编程套路
NVIC初始化
1、定义NVIC初始化结构体变量
2、设置中断分组
3、赋值初始化变量各成员
4、调用NVIC初始化函数
TIMx初始化
1、定义TIMx初始化结构体变量
2、开启定时器内部时钟
3、赋值初始化结构体变量各成员
4、调用TIMx初始化函数
5、开启定时器中断
6、使能定时器
中断响应函数编程

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Keil-STM32F1xx芯片包是Keil公司为STM32F1xx系列微控制器提供的软件集成开发环境(IDE)的扩展组件。该芯片包包含了STM32F1xx系列微控制器的支持文件,可以帮助开发者更加方便地进行嵌入式软件开发。 Keil-STM32F1xx芯片包具有以下几个主要功能: 1. 提供了针对STM32F1xx系列微控制器的初始化和驱动程序库。这些库包含了常用的外设驱动程序,如GPIO、串口、定时器等,开发者可以直接调用这些库函数来简化软件开发过程。 2. 集成了STM32F1xx系列微控制器的编译工具链。开发者可以在Keil环境中直接进行代码编写、编译和调试,无需另外安装和配置工具链,简化了开发环境的搭建流程。 3. 提供了丰富的调试功能。Keil-STM32F1xx芯片包支持单步调试、断点设置、变量监视等调试功能,可以帮助开发者快速定位程序中的问题并进行调试和修复。 4. 针对不同的STM32F1xx系列微控制器提供了相应的工程模板。开发者可以根据自己的需求选择合适的工程模板开始开发,省去了从零开始建立工程的麻烦。 总而言之,Keil-STM32F1xx芯片包为开发者提供了一套完整的软件开发工具集,使得在STM32F1xx系列微控制器上进行嵌入式软件开发变得更加高效和便捷。无论是初学者还是有经验的开发者都可以通过该芯片包实现快速、稳定的STM32F1xx系列微控制器应用程序开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只柠檬柠檬精

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值