STM32F103C8T6是一款基于ARM Cortex-M3内核(ARM公司在ARM11以后改用Cortex命名,并分成A、R和M三类,M系列有M0、M0+、M3、M4、M7)的32位的微控制器,采用LQFP48封装,由意法半导体公司(ST)推出,属于STM32系列(ST公司还有SPC5X系列微控制器)。其程序存储器FLASH容量是64KB (64K x 8bit),RAM容量是20KB(20K x 8bit),2个12bit ADC合计12路通道(外部通道只有PA0到PA7、PB0到PB1,并不是18通道),37个通用I/O口(PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1),4个16bit定时器(TIM1(高级控制定时器,带死区插入,常用于产生PWM控制电机)、TIM2、TIM3、TIM4),2*IIC,2*SPI,3*USART,1*CAN,工作电压2V~3.6V,工作温度为-40°C ~ 85°C,系统时钟最高可到72MHz(一般是由8MHz的外部时钟经锁相环9倍频到72MHz)。
点击跳转:相关学习资料
最近在学习STM32系列单片机,希望通过写博客的方式能够加深我对学习内容的理解。我在淘宝上买了一块STM32F103C8T6的最小系统板,板子的设计很精致。喏,它长这个样子:
其实他和10块钱包邮的那个蓝色核心板区别不大,只是将一些引脚引出好插诸如显示屏类的外设。板子设计的很巧妙,所有引脚都引出来了,同时预留四个接口方便接入显示屏等设备,预留了SWD调试接口,可以使用ST-LINK下载程序与仿真。跟STC89C52RC单片机不一样的是,STM32F103C8T6的GPIO有8种模式,其中包含上拉、下拉输入模式,所以外接按钮时可不设计上下拉电阻。根据他的原理图显示:按键KEY0一端接到3.3V的VCC,一端接到PA0引脚。发光二极管LED0一端也同样经1KΩ电阻接到3.3V的VCC,另一端则接到PC13上。因此,想要让二极管发光的话需要让PC13输出低电平。STM32最大工作电压3.6V,使用了LDO(低压差线性稳压器)将输入电压VIN降到3.3v给微控制器供电。3.3V和GND之间的4个0.1uf的旁路电容(去除高频交流信号)接到了芯片的4个VDD和4个VSS上(WHAT?芯片为啥整四个VDD和四个VSS?我猜应该是增强供电能力,保证供电的可靠性)。
开发板参数
我在网上找到了STM32F103中文手册,单片机命名原理和硬件资源归纳如下图所示:
值得注意的是:PA13、PA14、P15、PB3、PB4、PC14、PC15、PD0、PD1的默认功能并不是GPIO,使用时需要开启AFIO时钟,注意一下这一点。B站某UP制作了一个直观的图片,如下图所示:
官方手册提供的STM32F103系列微控制器引脚的默认功能如下图所示:
一般我们对STM32单片机下载程序会使用ISP串口下载(使用USB-TTL接PA9、PA10)、SWD下载(使用STLINKE接PA13、PA14)、JTAG下载(使用JLINKE接PA13、PA14、PA15、PB3、PB4)。
STM32F103C8T6上电复位后默认启动JTAG模式,会占用PA13、PA14、PA15、PB3、PB4,这就是上面所说的为什么这些引脚不能简单的当GPIO用。如果我们要使用这些引脚做GPIO,我们需要关闭JTAG,比如说我要使用GPIOA15作为GPIO口:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能PORTA时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);// 关闭JTAG但使能SWD
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PA15
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
详细关闭方法:见另一位博主的《STM32 JTAG调试》
The STM32F103xx medium-density performance line family incorporates the high-performance ARM®Cortex®-M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 128 Kbytes and SRAM up to 20 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses. All devices offer two 12-bit ADCs, three general purpose 16-bit timers plus one PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs and SPIs, three USARTs, an USB and a CAN.
The devices operate from a 2.0 to 3.6 V power supply. They are available in both the –40 to +85 °C temperature range and the –40 to +105 °C extended temperature range. A comprehensive set of power-saving mode allows the design of low-power applications.
The STM32F103xx medium-density performance line family includes devices in six different package types: from 36 pins to 100 pins. Depending on the device chosen, different sets of peripherals are included, the description below gives an overview of the complete range of peripherals proposed in this family.
These features make the STM32F103xx medium-density performance line microcontroller family suitable for a wide range of applications such as motor drives, application control, medical and handheld equipment, PC and gaming peripherals, GPS platforms, industrial applications, PLCs, inverters, printers, scanners, alarm systems, video intercoms, and HVACs.
主要特性
STM32F103C8T6单片机采用LQFP48封装设计,芯片一共引出44只引脚,其中A口有A0-A15共16个引脚,B口有B0-B15共16个引脚,C口有C13-C15共3个引脚,D口有D0-D1共两个引脚。值得注意的是最小核心板C14和C15接了32.768K晶振,D0和D1接了8MHz晶振,一般不要用做IO口。
其实在学习STC15系列单片机后对STM32单片机一度有恐惧感,STC15F2K60S2单片机的寄存器我觉得已经很多了,STM32那么多寄存器大家是怎么记住的。现在开始学习才了解到官方有出固件库供大家调用,根据推出时间不同可分早期固件库(V3.0.0以下)、标准外设库(点我跳转)、HAL库(click me)、LL库(LL库包含在cube中,使用CubeMX下载HAL库的时候就包含在HAL库里了) 四种。
目前最新的标准库版本为V3.5.0,调用官方提供的API进行开发,为ST公司2011年发布,停更已有10年的时间了。使用HAL可进行图形化开发,感官上更加生动形象。不过由于HAL库旨在解决标准库在不同系列单片机上不同通用的问题,其代码执行效率没有标准库高。如果编译器优化等级低,产生HEX文件会比较大。后来ST针对此问题推出了LL库,LL库大多数API函数是直接调用寄存器,提高了代码的执行效率。不过,一般推出的时间越久,我们所能搜集到的资料就越丰富,我目前在学习标准库的开发方式,建议大家根据自身情况做出选择。
更多资料可上ST公司的中文官网:https://www.st.com/content/st_com/zh.html寻找。