STM32单片机学习笔记(一)

judy的头像

1、 AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备

2、 Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用

3、 HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz

4、 LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed InternalRC)低速内部晶振,大概为40KHz左右,提供看门狗时钟和自动唤醒单元时钟源

5、 SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL

STM32单片机学习笔记(一)

6、 MCO[2:0]可以提供4源不同的时钟同步信号,PA8

7、 GPIO口貌似有两个反向串联的二极管用作钳位二极管。

STM32单片机学习笔记(一)

8、 总线矩阵采用轮换算法对系统总线和DMA进行仲裁

9、 ICode总线,DCode总线、系统总线、DMA总线、总线矩阵、AHB/APB桥

10、在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟

11、数据字节以小端存储形式保存在存储器中

12、 内存映射区分为8个大块,每个块为512MB

13、 FLASH的一页为1K(小容量和中容量),大容量是2K。

14、 系统存储区(SystemMemory)为ST公司出厂配置锁死,用户无法编辑,用于对FLASH区域进行重新编程。所以我们烧写程序务必选择BOOT1 = 0,这样通过内嵌的自举程序对FLASH进行烧写,比如中断向量表和代码

15、 STM32核心电压为1.8V

16、 STM32复位有三种:系统复位、上电复位、备份区域复位。其中系统复位除了RCC_CSR中的复位标志和BKP中的数值不复位之外,其他的所有寄存器全部复位。触发方式例如外部复位、看门狗复位、软件复位等;电源复位由于外部电源的上电/掉电复位或者待机模式返回。复位除了BKP中的寄存器值不动,其他全部复位;备份区域复位的触发源为软件复位或者VDD和VBAT全部掉电时。

17、 单片机复位后所有I/O口均为浮空输入状态

18、 68个可屏蔽中断通道,16个可编程优先级,16个内核中断,一共68+16=84个中断。103系列只有60个中断,107系列才有68个中断

19、 系统启动从0x00000004开始,0x000 0000保留

20、 (NestedVectored Interrupt Controller)NVIC嵌套向量中断控制器,分为两种:抢先式优先级(可嵌套)和中断优先级(副优先级,不能嵌套)。两种优先级由4位二进制位决定。分配下来有十六种情况:

21、0号抢先优先级的中断,可以打断任何中断抢先优先级为非0号的中断;1号抢先优先级的中断,可以打断任何中断抢先优先级为2、3、4号的中断;……;构成中断嵌套。如果两个中断的抢先优先级相同,谁先出现,就先响应谁,不构成嵌套。如果一起出现(或挂在那里等待),就看它们2个谁的子优先级高了,如果子优先级也相同,就看它们的中断向量位置了。原来中断向量的位置是最后的决定因素!!!!

22、 上电初始化后AIRC初始化为0,为16个抢先式优先级,但是由于所有的外部通道中断优先级控制字PRI_n为0,所以抢先式优先级相同,此时就不能嵌套了

23、 NVI中有ISER[2](Interrupt Set-Enable Registers),ICER[2](Interrupt Clear-Enable Registers),ISPR[2](Interrupt Set-Pending Registers),ICPR[2](Interrupt Clear-Pending Registers),IABR[2](Active Bit Registers),IPR[15](InterruptPriority Registers)定义。其中ISER和ICER分别为中断使能和中断失能寄存器,都是写1来使能/失能中断的。为什么写1?为什么不采用一个寄存器而用两个寄存器来表示中断使能/失能状态?由于硬件,写0比较复杂,并且可能造成其他位的状态改变,所以用1来表示打开或者关断是比较合理的

24、 中断标志位需要手动清除

25、 配置外围器件的一般步骤:1、打开端口时钟。2、定义初始化结构体并初始化。3、调用

26、串口的奇偶校验:如果是奇偶校验,那么USART_InitStructure.USART_WordLength= USART_WordLength_9b;这个数据的长度必须设定为9位!

27、ADC的规则组可以自定义转换通道顺序和转换的通道个数。在实际应用中,有时候希望有一些特别的通道具有很高的优先权,需要在规则组进行转换的时候强制打断,进行另一个通道的转换,这样一组通道,叫做注入组。

28、定时器的输出比较模式:Timing(冻结,什么都不做,普通定时),Active(OCxREF输出高电平有效),Inactive(OCxREF输出低电平),Toggle(比较成功后翻转电平)。

29、STM32的定时器从0开始计数,满足一些条件,给出标志位(比如匹配成功、时间更新、溢出等)然后从0开始计数。这一点和51不同。

30、OCx=OCxREF+极性

31、自动装载寄存器和影子寄存器:前者相当于51当中的溢出设定数值。而影子寄存器顾名思义是影子,就是寄存器的另一分copy。实际起作用的是影子寄存器,而程序员操纵的则是自动装载寄存器。如果APPE位使能,表明自动装载寄存器的值在下一次更新事件发生后才写入新值。否则,写入自动装载寄存器的值会被立即更新到影子寄存器。

32、RCC_PCLK1Config(RCC_HCLK_Div4);PCLK1的4分频给定时器基准时钟

33、定时器配置:RCC、NVIC、GPIO(OC输出或者PWM)、TIMx

34、通用定时器可以输出4路不同的PWM,高级定时器可以输出4路不同的PWM外,还可以输出3路互补的PWM信号(驱动三相电机),一共有7路。这样算出来STM32可以产生30路PWM=7*2+4*4

35、


待续...

转自: eeworld