STM32从入门到精通

STM32从入门到精通前言:还记得大学老师跟我说过的一句话,嵌入式这个行业越学越觉得自己懂得太少。这也许就是我们要树立终生学习的目标和动力吧!我所理解的精通就是对崇尚的技术永无止境地追求。

大家好,欢迎来到IT知识分享网。

前言:还记得大学老师跟我说过的一句话,嵌入式这个行业越学越觉得自己懂得太少。这也许就是我们要树立终生学习的目标和动力吧!我所理解的精通就是对崇尚的技术永无止境地追求。

一、相识STM32

  • STM32这款由ST公司开发的32位微控制器,是继51单片机后第一款我为之痴迷的经典MCU。大学的时光很短,而我与她为伴,但从未静下心来,好好看她!

1.1 STM32如何选型?

  • 当开发一款嵌入式产品时,主控芯片的选型相信是一个非常棘手的问题,不仅要考虑芯片的性能硬件资源是否可以满足产品的需求,还有考虑芯片的成本以及功耗等因素,但这些对于有经验的工程师来说并不算什么难事。
  • 那对于初学者该如何选型呢?那肯定是找资料齐全的,推荐初学者选择STM32F103系列作为自己的入门32的经典,学习资料可以选择正点原子,原子哥的STM32资料相信大家都有所耳闻,确实做得很用心。附上原子论坛http://www.openedv.com/
  • 要增加自己阅历,没事可以多逛逛论坛,关注一些新出的MCU,毕竟技术在发展,作为嵌入式工程师要跟上时代的进步,其实官方手册可以提供我们一个很好的参考,大家可以自行去ST官网http://www.st.com/content/st_com/en.html下载,然后再选择最符合自己项目要求的芯片。
    这里写图片描述

1.2 BOOT引脚设置

在ISP下载电路中,我们需要配置BOOT引脚,有关BOOT引脚不同的配置会产生不同的启动方式,具体见表格BOOT配置。

BOOT0 BOOT1 启动方式
0 X 内部FLASH
1 0 系统存储器
1 1 内部SRAM

1.3 如何分配原理图IO

在画原理图之前,一般的做法是先把引脚分类好,然后才开始画原理图,引脚分类具体见表格。

引脚分类 引脚说明
电源 (VBAT)、(VDD VSS)、(VDDA VSSA)、(VREF+ VREF-)等
晶振IO 主晶振IO,RTC晶振IO
下载IO 用于JTAG下载的IO:JTMS、JTCK、JTDI、JTDO、NJTRST
BOOT IO BOOT0、BOOT1,用于设置系统的启动方式
复位IO NRST,用于外部复位
GPIO 专用器件接到专用的总线,比如I2C,SPI,SDIO,FSMC,DCMI这些总线的器件需要接到专用的IO

1.4 如何寻找IO的功能说明

要想根据功能来分配 IO,那就得先知道每个 IO 的功能说明,这个我们可以从官方的数据手册里面找到。在学习的时候,有两个官方资料我们会经常用到,一个是参考手册(英文叫 Reference manual),另外一个是数据手册(英文叫 Data Sheet)。两者的具体区别见表格。

这里写图片描述

二、寄存器开发和库开发

  • 对于STM32是用寄存器开发还是用库开发,一直备受争论,而寄存器开发和库开发都各有利弊,主要还是看开发者在项目中如何来权衡。下面用最基础的GPIO引脚配置来对比一些这两种开发方式的差异。

2.1 寄存器开发

  • 必备手册《STM32中文参考手册》
  • 寄存器开发让开发者知根知底,能够深入了解底层工作原理。
  • 寄存器开发代码执行效率更高,代码更加简洁。
int main(void)
{
	//开启 GPIOB 端口时钟
	RCC_APB2ENR |= (1<<3);
    //清空控制 PB0 的端口位
    GPIOB_CRL &= ~(0X0F << (4*0));
    //配置 PB0 为通用推挽输出,速度为10MHz
    GPIOB_CRL |= (1 << (4*0));
    // PB0 输出低电平
    GPIOB_ODR |= (0<<0);
    
    while(1);
}

2.2 库开发

  • 必备手册:《stm32F1xx_stdperiph_lib_um.chm》
  • 库开发使代码可读性增强,且符合CMSIS库标准便于移植。
  • 代码相对寄存器开发更加繁琐,执行效率没有寄存器高。
int main(void)
{
	// 定义一个 GPIO_InitTypeDef 类型的结构体
	GPIO_InitTypeDef GPIO_InitStructure;
	// 开启 GPIOB 端口时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	// 选择要控制的 GPIO 引脚
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	// 设置引脚模式为通用推挽输出
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	// 设置引脚速率为 10MHz
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	// 调用库函数,初始化 GPIO 引脚
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	// 使引脚输出低电平
	GPIO_ResetBits(GPIOB, GPIO_Pin_0);
	
	while(1);
}

2.3 开发总结

  • 寄存器开发需要非常的细心,不然容易将寄存器配置错,建议初学者从寄存器开发开始学起,等自己对寄存器开发比较了解后,再转向库开发,正所谓:学从难处学,用从易处用
  • 针对需要变更MCU的项目开发还是建议选择库开发,可以节省项目开发的时间,便于产品的升级换代。

三、如何学习单片机

  • 我将带领大家学习一款NXP的FRDM-KL25Z开发板,介绍当拿到一款新开发板时,需要下载哪些开发资料,以及如何快速的根据开发板SDK搭建自己的工程项目。相信大家通过整个流程的学习,以后面对不同的芯片,一样可以快速的开发自己的项目。
    项目链接如下:
    单片机开发入门

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/14101.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信