一、上手思路
1、上网查芯片型号,了解一些基础概念,之后上官网(意法半导体公司)查找相关资料,主要查看产品规格书(芯片手册),其中包含芯片总体描述,引脚描述,电器特性等;参考手册,用于编写代码是查阅。
2、从零开始学比较费劲,一般建议在淘宝购买相应开发版以及配套资料学习参考,参考资料里一般包含有硬件原理图和一些基础程序代码,通过原理图可以分析硬件(从最小系统开始分析),通过程序代码和参考手册编写程序
二、最小系统
1、最小系统的定义:用最少的电路组成单片机可以工作的系统,一般包含电源电路,时钟电路,复位电路,调试下载电路和启动选择电路。
三、外设和寄存器
1、常见外设以及主要程度,主要通过外设寄存器控制外设
2、存储结构
stm32f103c8t6寄存器地址是重0X0000 0000-0XFFFF FFFF,大小一共是4GB,也就是32位CPU能访问的范围,其中0X0000 0000-0X2000 0000地址范围内,0X0000 0000-0X0800 0000是Flash地址范围,用与存放代码,系统上电后,从Flash里读取代码,0X2000 0000是SRAM地址起始范围,存放代码运行过程中产生的零时数据变量
0X4000 0000是外设地址,其中包括GPIO、串口、DMA等地址,0XE000 0000-0XE010 0000是cortexM3内部外设寄存器地址,如中断向量表、系统滴答时钟寄存器地址都在此范围内
四、操作步骤示例
举个例子,比如我们想要通过PA1输出高电平使LED灯被点亮,操作步骤如下
1、查看数据手册中的存储结构图,找到PA1对应的GPIO接口的地址范围,查表可知是0X4001 0800-0X4001 0C00
2、根据参考手册查看地址范围为0X4001 0800-0X4001 0C00的详细信息,见下图,该地址范围内有七个寄存器,每一个寄存器作用效果不同,通过控制其中的某个寄存器就可以修改GPIOA不同引脚的输出值,达到控制效果,具体请详细阅读参考手册。
五、单片机的开发方式
1、使用汇编操作寄存器(最开始使用,执行效率高但是编写难度大,移植性低)
2、使用C语言操作寄存器(执行效率中等,但其编写效率低,移植性差)
3、使用库开发,库开发有两类,
一类是标准库(执行效率较低,但编写效率高,移植性一般),发布较早,教程多,缺陷是没有一致性,只针对某一块或者几块芯片,不同芯片可能库函数不一样,移植难,官网现在已经停止更新标准库了。
一类HAL库(执行效率较低,但编写效率高,移植性好),支持所有st芯片,移植性好,现在基本都是用HEL库开发芯片。
六、创建工程
1、自定义创建工程,优点是定制化程度高干净简练,缺点是前期配置难度高,需要一定经验
2、使用STM32CubeMX创建工程,其优点是上手难度低,可视化方便,缺点是按照指定规则编写代码,代码注释多且不能随便删除。