STM32自学笔记(第2版) pdf

STM32自学笔记(第2版)

内容简介

《STM32自学笔记(第2版)》以新颖的思路、简单的逻辑、简洁的语言来阐述作者初遇STM32以来的种种认识,书中多处内容都是由作者从STM32初学时的实践中总结而来。《STM32自学笔记(第2版)》主要介绍ARMCortex-M3系列STM32的原理及应用,全书共7章。第1章主要对STM32做基本介绍;第2章介绍ARMCortex-M3内核架构的大致概况;第3章从外设特性、功耗特性,安全特性等方面对STM32进行全面的剖析;第4章主要介绍开发工具;第5章则引导读者针对STM32的外设进行一系列的基础实验设计,共18个;第6章通过11篇高级应用文章介绍STM32的一些高级知识;第7章则通过一个综合实例讲述一个STM32完整应用方案的实现过程。

《STM32自学笔记(第2版)》条理清楚,通俗易懂,贴近读者,主要面向STM32的初学者,以及所有对ARMCortex-M3系列微控制器感兴趣的期友们。

作者简介

蒙博宇 著

目录

第1章 什么是STM32
1.1 从Cortex-M3说起
1.2 STM32面面观

第2章 杰出的源泉一一ARM Cortex-M3内核架构
2.1 ARM架构回顾
2.2 Cortex-M3 CPU:核心中的核心
2.2.1 管道
2.2.2 编程模型
2.2.3 Cortex-M3 CPU的运行模式
2.2.4 Thumb-2指令集
2.2.5 非对齐存取接口
2.3 Cortex-M3处理器一一不只是个处理器
2.3.1 总线
2.3.2 总线矩阵
2.3.3 存储映射
2.3.4 位带的概念
2.3.5 系统节拍定时器
2.3.6 中断处理
2.3.7 嵌套中断向量控制器
2.4 低功耗的新期待
2.4.1 进入低功耗模式
2.4.2 CoreSight调试组件

第3章 欢迎来到STM32的世界
3.1 让STM32跑起来
3.1.1 引脚分布和封装尺寸
3.1.2 电源的供应方案
3.1.3 复位电路
3.l.4 一个典型的STM32最小系统
3.1.5 时钟源的选择
3.1.6 启动引脚和ISP编程
3.1.7 调试端口
3.2 认识真正的STM32
3.2.1 存储区映射
3.2.2 性能最大化
3.3 丰富多样的外部设备
3.3.1 通用设备单元
3.3.2 通信接口
3.4 STM32也论低功耗
3.4.1 运行模式
3.4.2 几种低功耗模式
3.4.3 调试支持特性
3.5 为STM32保驾护航
3.5.1 一些安全特性
3.5.2 复位控制
3.5.3 电源检测
3.5.4 时钟安全系统
3.5.5 看门狗
3.5.6 外设的安全特性
3.6 高性能内置Flash模块
3.6.1 内置Flash安全特性和编程方法
3.6.2 选项字节

第4章 百花齐放的开发工具
4.1 开发平台
4.2 固件库和协议栈
4.3 实时操作系统RTOS
4.4 Keil MDK使用人门
4.4.1 Keil MDK的安装与工程建立
4.4.2 使用Keil MDK进行STM32的程序开发

第5章 STM32基础实验
第6章 STM32进阶应用
第7章 综合性实例:S丁M32的IAP方案
附录A 常用程序
附录B Typedef定义
附录C 本书硬件平台介绍
参考文献

感悟与笔记

STM32 增强型含有8个时钟定时器,其中TIM8,TIM1为高级定时器,TIM6,TIM7为基本定时器,TIM2,TIM3,TIM4,TIM5 为通用定时器

先从基本定时器开始,最近简单的定时1秒钟,对于这个定时有很多时候并不需要做几个时间基准,比方说可以做一个1,秒的基准,设定一个参数M=0,当每及时一秒钟M加一,然后可以在IF语句中设置当M=5时就认为5秒了可以做5秒该做的事情,当M=10的时候就认为5秒了可以做10秒该做的事情,这就省事看了,当然时间基准可以为0.1秒,0.01秒之类的

先说下程序 首先还要把RCC中的时钟6的时钟打开,实在APB1总线上;

void TIM_Confiuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//定义
TIM_OCInitTypeDef TIM_OCInitStructure;//定义

TIM_TimeBaseInitStructure.TIM_Period=65535;计数重载值就是这是最大数值,它加一为最小数
TIM_TimeBaseInitStructure.TIM_Prescaler=0;//预分频值0看下面程序
TIM_TimeBaseInitStructure.TIM_ClockDivision=0;//时钟分割0
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式;有向下计数
TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStructure);//定义为时钟6参数
TIM_PrescalerConfig(TIM6,7199,TIM_PSCReloadMode_Immediate);
//分频值为7199+1;因为时钟为72MHz;所以即使一次需要0.0001秒;也就是说计数到10000就是1秒钟;
设置通道模式,时钟有四个通道
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;//计数器模式
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//使能输出
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//输出高电位

TIM_OCInitStructure.TIM_Pulse=a;//写入0-65535;常数10000,代表1秒
TIM_OC1Init(TIM6,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM6,TIM_OCPreload_Disable);//禁止预取缓存,作为计时器不要打开,在PWM模式下打开

TIM_ITConfig(TIM6,TIM_IT_CC1,ENABLE);//使能时钟6通道一中断

TIM_Cmd(TIM6,ENABLE);//使能时钟
}
void TIM6_IRQHandler(void)
{
vu16 A=0;
if(TIM_GetITStatus(TIM6,TIM_IT_CC1)!=RESET);//如中断来临
{
A=TIM_GetCapyure1(TIM6);//读取时钟此时数字
TIM_SetCompare1(TIM6,A+a);//设置下一个中断来临数字
TIM_ClearITPendingBit(TIM6,TIM_IT_CC1);//清楚中断标志
//TODO 在这里执行事情
}

这里使用了中断所以在函数NVIC里要配置中断优先级

Copyright © 2021-2022 知识猫. All Rights Reserved.