stm32学习路程
前言
学习笔记,为了以后查漏补缺,记录学习进度和收获。本次学习基于奋斗stm32xV5_3寸屏幕的开发板,基于Keil V4开发环境,参考资料32位基于ARM微控制器STM32F101xx与STM32F103xx 固件函数库。
第一章 学习GPIO
一个基本工程包括芯片底层启动驱动的汇编文件startup_stm32f10x_hd.s在ASM文件夹里(不需要修改)
一个用户文件夹一般取名USR或者APP
一个库文件夹FWlib由stm32公司提供(不需要修改)
一个CMSY文件夹,包含core_cm3.c内核源码;system_stm32f10x.c与芯片相关的系统文件(不需要修改)
一个说明文件readme
stm32f10x_rcc.都会用到,提供系统初始化,时钟设置等功能。
stm32f10x_gpio.c I/O口操作都会用到GPIO.c
typedef struct
{
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3; //赋值结构体变量
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_Init(GPIOD, &GPIO_InitStructure);
第二章 学习usart
1、用到的库
stm32f10x_usart.c用于串口初始化
stm32f10x_it.c 编写串口中断函数,一般放在user
misc.c 设置中断向量
2、定义的结构体
USART_InitTypeDef串口的初始化参数
USART_InitTypeDef USART_InitStructure;声明一个结构体变量
/**赋值**/
USART_InitStructure.USART_BaudRate = 115200;
//速率115200bps
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
//数据位8位
USART_InitStructure.USART_StopBits = USART_StopBits_1;
//停止位1位
USART_InitStructure.USART_Parity = USART_Parity_No;
//无校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
//收发模式
/* Configure USART1 */
USART_Init(USARTx, &USART_InitStructure);
//调用配置串口参数函数
3、三个重要的配置函数
void RCC_Configuration(void);//时钟配置
void GPIO_Configuration(void);//I/O配置
void NVIC_Configuration(void);//中断配置
void USART_Config(USART_TypeDef* USARTx);//串口初始化配置
第四章 学习RTC
1、首先明确工程文件结构
使用到RTC(实时时钟系统)的工作要包含stm32f10x_rtc.c库文件
使用到bkp(备份寄存器)功能的得包括stm32f10x_pwr.c
RTC低功耗供电时还要使用到功耗控制(PWR),包括stm32f10x_pwr.c
还包含stm32f10x_it.c:该源文件包含了所有的中断处理程序(如果未使用中断,则所有的函数体都为空)。
2、使用到的寄存器
1、 备份寄存器(BKP) 备份寄存器由10个16位寄存器组成,可用来存储20 个字节的用户应用程序数据。他们处在备份域里,当VDD 电源被切断,他们仍然由VBAT 维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。此外,BKP 控制寄存器用来管理侵入检测和RTC 校准功能。
2、 功耗控制(PWR)
PWR有多种用途,包括功耗管理和低功耗模式选择。
3、使用到的函数
void RTC_Configuration(void);
u32 Time_Regulate(void);
void Time_Adjust(void);
void Time_Show(void);
void Time_Display(u32 TimeVar);
3、技术掌握要点
/*******************************************************************************
* Function Name : RTC_IRQHandler
* Description : This function handles RTC global interrupt request.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void RTC_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_SEC) != RESET) //读取秒中断状态
{
RTC_ClearITPendingBit(RTC_IT_SEC); //清除秒中断标志
GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5))); //LED1闪烁
/* 时钟更新标志置位 */
TimeDisplay = 1;
RTC_WaitForLastTask(); //等待上一次对RTC寄存器的写操作是否已经完成
if(RTC_GetCounter() == 0x00015180) //当前时间是23:59:59时 复位为0:0:0
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR->CR|=1<<8; //取消备份区写保护
RTC_EnterConfigMode(); //允许配置
RTC_WaitForLastTask(); //等待上一次对RTC寄存器的写操作是否已经完成
RTC_SetCounter(0x0); //写入复位值
RTC_WaitForLastTask(); //等待上一次对RTC寄存器的写操作是否已经完成
}
else if(RTC_GetCounter() > 0x00015180) //当再次上电后计数值超过0x00015180, 复位为当前值取模0x00015180。
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR->CR|=1<<8; //取消备份区写保护
RTC_EnterConfigMode(); //允许配置
RTC_WaitForLastTask(); //等待上一次对RTC寄存器的写操作是否已经完成
RTC_SetCounter(RTC_GetCounter()%0x00015180); //写入复位值
RTC_WaitForLastTask(); //等待上一次对RTC寄存器的写操作是否已经完成
}
}
}

这篇博客记录了作者在学习STM32微控制器过程中,关于GPIO和USART的详细学习过程。从GPIO的基本工程结构到USART的初始化配置,包括串口速率设定、数据位长度、停止位和模式选择等关键知识点。
3万+

被折叠的 条评论
为什么被折叠?



