STM32学习笔记
更新时间:2024-01-16 02:56:01 阅读量: 教育文库 文档下载
- stm32怎么学推荐度:
- 相关推荐
STM32学习笔记整理
端口复用配置过程
引脚具体可以复用为啥功能,参考芯片手册STM32F103ZET6.Pdf
具体每个引脚配置成什么模式,参考STM32中文参考手册,第八章,通用IO和复用。
NVIC中断
假定设置中断优先级组为2,然后设置
中断3(RTC中断)的抢占优先级为2,响应优先级为1。 中断6(外部中断0)的抢占优先级为3,响应优先级为0。中断7(外部中断1)的抢占优先级为2,响应优先级为0。
那么这3个中断的优先级顺序为:中断7>中断3>中断6
特别说明:
一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组。随意改变分组会导致中断管理混乱,程序出现意想不到的执行结果。
首先,系统运行后先设置中断优先级分组。调用函数: void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); 整个系统执行过程中,只设置一次中断分组。 然后,中断初始化函数
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;// 抢占优先级为1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;// 子优先级位2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据上面指定的参数初始化NVIC寄存器
结构体内容 NVIC_InitTypeDef typedef struct {
uint8_t NVIC_IRQChannel; //设置中断通道
uint8_t NVIC_IRQChannelPreemptionPriority;//设置响应优先级 uint8_t NVIC_IRQChannelSubPriority; //设置抢占优先级 FunctionalState NVIC_IRQChannelCmd; //使能/使能 } NVIC_InitTypeDef;
串口部分
常用寄存器
USART_SR状态寄存器 USART_DR数据寄存器 USART_BRR波特率寄存器
常用库函数
void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能 void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口, DR
uint16_t USART_ReceiveData();//接受数据, 从DR读取接受到的数据
FlagStatus USART_GetFlagStatus();//获取状态标志位 SR void USART_ClearFlag();//清除状态标志位 SR ITStatus USART_GetITStatus();//获取中断状态标志位 SR void USART_ClearITPendingBit();//清除中断状态标志位 SR
配置步骤
1串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd(); ++++++复位时钟 2串口复位:USART_DeInit(); 这一步不是必须的
3GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP //复用,具体查表 4串口参数初始化:USART_Init();
5开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤) NVIC_Init();
USART_ITConfig(); 6使能串口:USART_Cmd();
7编写中断处理函数:USARTx_IRQHandler(); 8串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据 9串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
外部中断配置步骤
初始化IO口为输入。 GPIO_Init();
开启IO口复用时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 设置IO口与中断线的映射关系。 void GPIO_EXTILineConfig(); 初始化线上中断,设置触发条件等。 EXTI_Init();
配置中断分组(NVIC),并使能中断。 NVIC_Init(); 编写中断服务函数。
EXTIx_IRQHandler(); 清除中断标志位
EXTI_ClearITPendingBit();
独立看门狗
常用库函数
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能 void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PR void IWDG_SetReload(uint16_t Reload);//设置重装载值:写RLR void IWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR void IWDG_Enable(void);//使能看门狗:写0xCCCC到KR
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新
配置步骤
取消寄存器写保护:
IWDG_WriteAccessCmd();
设置独立看门狗的预分频系数,确定时钟: IWDG_SetPrescaler();
设置看门狗重装载值,确定溢出时间: IWDG_SetReload(); 使能看门狗
IWDG_Enable(); 应用程序喂狗:
IWDG_ReloadCounter()
溢出时间计算:
Tout=((4×2^prer) ×rlr) /40 (M3)
通用定时器 Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
Tclk时钟频率默认72M (PSC+1)/Tclk一个周期时间 使能定时器时钟。
RCC_APB1PeriphClockCmd(); 初始化定时器,配置ARR,PSC。 TIM_TimeBaseInit(); 开启定时器中断,配置NVIC。 void TIM_ITConfig(); NVIC_Init(); 使能定时器。 TIM_Cmd(); 编写中断服务函数。
TIMx_IRQHandler();
TIM_TimeBaseInit()部分简介
TIM_TimeBaseStructure.TIM_Period = 4999; TIM_TimeBaseStructure.TIM_Prescaler =7199; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
通用定时器产生PWM
1使能定时器3和相关IO口时钟。
使能定时器3时钟:RCC_APB1PeriphClockCmd(); 使能GPIOB时钟:RCC_APB2PeriphClockCmd(); 2 初始化IO口为复用功能输出。函数:GPIO_Init();
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
3这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置, 所以需要开启AFIO时钟。同时设置重映射。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); 4 初始化定时器:ARR,PSC等:TIM_TimeBaseInit(); 5 初始化输出比较参数:TIM_OC2Init();
6 使能预装载寄存器: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 7 使能定时器。TIM_Cmd();
8 不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();
正在阅读:
STM32学习笔记01-16
完整打印版小学一年级下册写字课教案(个)03-15
2017秋四年级数学上册 第七单元 生活中的负数单元测试卷 北师大03-06
多媒体习题(含答案)210-08
卧式双面铣削组合机床的液压系统设计说明书09-15
中药湿敷操作视频详细对话11-18
标准分包合同模板(建筑)09-22
正规租房合同(优秀9篇)04-03
小学科技节口号03-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 笔记
- 学习
- STM32
- 我身边的榜样演讲稿
- 带拼音的普通话绕口令
- 2012统计学复习题
- 如何编写黏土质耐火砖项目可行性研究报告方案(可用于发改委立项及银行贷款+2013详细案例范文)
- 工业与民用建筑抗震设计规范
- 7 第二章 气体摩尔体积(学生版)(2)
- 威宁县特岗教师朱发斌演讲稿1
- PLC编程实例
- Java复习
- 新材料研发与广西循环经济发展
- 2014年河南中考历史试卷分析
- 警察学院毕业论文选题汇总
- 新苏教版6六年级数学上册小学生数学报单元期中期末试卷(全册) - 图文
- 廉政文化演讲《清风作伴 读书思廉》演讲稿
- 管理学 - 高教版 - 周三多主编 - 第二版 - - 第10章习题
- 传统文化概论论文
- 核电柴油机应急系统-方案
- 新SATACT 文章改错(语法)部分比较更新
- 带式运输机上二级圆柱齿轮减速器课程设计
- 免疫学名词解释