一、原理图附上
目录
第一、如何学习
1. 学习STM32系列处理器前需要具备的基础知识:
- C语言编程基础知识和语法
- 嵌入式开发基础知识,例如GPIO、USART、SPI等
- 熟练使用开发环境,例如Keil、ST-Link等
2.下载官方固件库和开发工具,例如Keil、ST-LINK软件等
- 连接STM32开发板与开发电脑,将开发板与电脑连接
- 确定好使用的开发工具与开发环境,例如Keil、STM32CubeMX等
3. 建立项目:
- 打开Keil或STM32CubeMX软件
- 新建工程项目,选择目标芯片型号,例如STM32F103C8T6
- 在工具栏中选择配置向导,设置工作频率、时钟、IO口等
- 创建可执行文件,生成main.c和stm32f1xx_hal_conf.h等主要文件
-学习当然要有好的资料如
《STM32 参考手册》是 ST 出的官方资料,有 STM32 的详细介绍,包括了 STM32 的各种
寄存器定义以及功能等,是学习 STM32 的必备资料之一。
第二、开始学习库函数
推荐使用库函数开发的方法。这样很多底层的寄存器不需要自己配置,只要会用官方库函数就行了。配合库函数使用手册,可以清楚的查到每个函数的使用方法。因此推荐先使用例程的工程文件,逐步学习如何修改。比如点亮流水灯的工程,对于IO口的操作并不太复杂,初始化完成之后通过Setbit和Resetbit这两个函数就可以实现高低电平的输出。然后,可以试着改一下亮灭,增加一个按键控制,中断延时,等等。
1.Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用。
2.STM32的定时器从0开始计数,满足一些条件,给出标志位(比如匹配成功、时间更新、溢出等)然后从0开始计数。这一点和51不同。
3.下载程序有两种方式,一种为ICP(在线编程),适用于JTAG或SWD协议下的烧写程序。另一种成为IAP(在应用编程),适用于很多接口(USB,串口,CAN)下载到存储器中,IAP允许在程序运行时重新烧写FLASH。
4.Code为程序代码部分;
RO-data表示程序定义的常量;
RW-data表示已初始化的全局变量;
ZI-data表示未初始化的全局变量,以及初始化为0的变量;
Code, RO-data,RW-data..............flash;
RW-data, ZIdata...................RAM;
初始化时,RW-data从flash拷贝到RAM。
5.STM32的外部中断是以组来区分的,也就是说PA0,PB0,PC0单片机是无法区分其中哪个触发的中断à均为EXIT0线中断服务例程。所以,外部中断支持16路的中断分辨率。从另一个方面来讲,我们可以设置GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcex);来开通中断线实现组内的不同中断。
6.DAC有两个寄存器,一个是DHR(Data HoldingRegister)数据保持寄存器,一个DOR(Data Output Register)数据输出寄存器。真正起作用的是DOR寄存器,该寄存器把值给数模转换发生单元输出以VREF+为参考电压的电压值。如果是硬件触发转换,系统将在1个ABP时钟周期后把值给DOR,如果是软件触发转换,时间为3个APB时钟周期。然后,均等待Tsetting时间(Typical为3us,Max为4us)后真正输出电压值。
7.DMA仲裁器分为软件和硬件两种。软件部分分为4个等级,分别是很高优先级、高优先级、中等、低。硬件部分由通道的大小来决定优先级,越低优先级越高。
8.DMA有一个实时的传输数据量寄存器叫做DMA_CNDTR,最大值为65535,存放的是当前传输所要传输的数据量。当数据量变为0时,表明传输完成
3、CAN总线
CAN总线具有以下六个特点:
-
多主控制(挂接在总线上的所有设备均可以成为主设备,并且设备ID是用来决定设备的优先级,没有设备地址概念);
-
系统若软性(没有设备地址概念);
-
通讯速度较快,通讯距离较远(1Mbps下40M,5kbps下10KM);
-
具有错误检测、错误通知(通知其他设备)和错误恢复功能(强制结束发送,重复发送接收错误的信息。);
-
故障封闭,当总线上的设备发生连续故障错误时,CAN控制器会把改控制器踢出总线;
-
连接节点多。理论上可以无限制加载,但是受到时间延迟和电气负载的限制,实际数目是有限制的。降低传输速度可以适当增加可挂接负载个数。