1. Hardware foundation
1. Development version: STM32-PZ6806L
2. MCU model: STM32F103ZET6
(1) Core: 32-bit high-performance ARM Cortex-M3 processor. Clock: up to 72M, can actually overclock a little. Single-cycle multiply and hardware divide. (2) IO port: STM32F103ZET6: 144 pins, 112 IOs, most of the IO ports are resistant to 5V (except analog channels), support debugging: SWD and JTAG, SWD only needs 2 data lines (3) Memory capacity: 512K FLASH, 64K SRAM (4) Clock, reset and power management: ① 2.0~3.6V power supply and IO voltage ② Power-on reset, power-down reset and programmable voltage monitoring ③ Powerful clock system -4~16M external high-speed crystal oscillator - Internal 8MHz high-speed RC oscillator - Internal 40KHz low speed RC oscillator, watchdog clock -Internal phase-locked loop (PLL, frequency multiplication), the general system clock is obtained after the external or internal high-speed clock is multiplied by PLL - External low-speed 32.768K crystal oscillator, mainly used as RTC clock source (5) Low power consumption: - Three low power consumption modes of sleep, stop and standby - Available battery to power RTC and backup registers (6) AD: 3 12-bit AD (up to 21 external measurement channels) - Conversion range: 0-3.6V (reference supply voltage) - Internal channel can be used for internal temperature measurement - Built-in reference voltage (7) DA: 2 个 12 位 DA (8) DMA: 12 DMA channels (7-channel DMA1, 5-channel DMA2), supporting peripherals: timer, ADC, DAC, SDIO, I2S, SPI, I2C, and USART (9) Timer: up to 11 timers - 4 general purpose timers - 2 basic timers - 2 advanced timers -1 system timer - 2 watchdog timers (10) Communication interface: up to 13 communication interfaces - 2 I2C interfaces -5 serial ports -3 SPI interfaces -1 CAN2.0 - 1 USB FS -1个SDIO |
3、LED电路
在开发版上有8个LED灯,分别与GPIOC的0-7脚相连。
二、软件基础
1、Keil5 IDE;
2、STM32F1扩展库(STM32芯片包);
3、启动文件。startup_stm32f10x_hd.s
ld( Low-density) 小容量 16-32K 这些都是基本型的,包括STM32F101xx, STM32F102xx 和 STM32F103xx vl (value line devices) 超值型系列大家记住:这个只有STM32F100xx,也就是说只要是vl那一定是STM32F100的启动文件,其他的不予考虑 |
启动文件负责执行微控制器从“复位”到“开始执行main函数”中间这段时间(称为启动过程)所必须进行的工作。
(1) 初始化堆栈指针SP=_initial_sp (2) 初始化PC指针=Reset_Handler (3) 初始化中断向量表 (4) 配置系统时钟 (5) 调用C库函数_main 初始化用户堆栈,从而最终调用main函数 |
启动文件可以从STM32芯片包安装路径中获取
(Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\2.1.0\Device\Source\ARM)
或者从项目例程文件夹中获取。
4、程序下载软件,使用该软件通过板载USB转串口将PC端Keil5环境下编译生成的.hex文件下载到开发版的MCU中。
三、项目创建
1、新建项目文件夹;(例如:F:\STM32\project\regtemp)
2、通过Keil5创建新项目,保存在所创建的文件夹中;(例如项目名为:ptemp)
然后在弹出的“选择设备”文件夹中选择与开发版的MCU型号相对应的芯片。
在随后的"ManageRun-Time Environment"对话框打开后,不做选择,直接关闭。
这时Keil5的项目向导会在项目文件夹(regtemp)下生成项目文件和相应文件夹:
3、在regtemp文件夹中新建"user"文件夹,将startup_stm32f10x_hd.s启动文件复制到"user"文件夹内,在"user"文件夹内新建一个文本文件,并将其文件名改为"main.c"。
4、在keil5的"Project"选项卡中展开"Target1",右键单击"Source Group1",选择菜单"Add Existing Files toGroup 'Source Group1'"
在打开的对话框中选择"user"文件夹内的"main.c"和"startup_stm32f10x_hd.s"文件,然后点击“Add”,将这两个源程序文件添加到当前项目中。
添加后"SourceGroup1"中包含两个文件。
5、对"main.c"编程。
通过编程控制开发板上一个LED灯亮(D1),根据电路图,就是PC1为低电平,即通过GPIOC的GPIOC_0输出低电平。实现该功能需要3个步骤:
①使能GPIOC时钟;
②设置GPIOC_0的工作模式;
③将GPIOC_0复位。
实现这些操作都是对MCU芯片内片内外设的功能寄存器操作。通过APB2外设时钟使能寄存器(RCC_APB2ENR)使能GPIOC时钟;通过GPIOC_CRL,GPIOC_CRH配置GPIOC_0的工作模式;通过GPIOC_BSRR将GPIOC_0复位,通过 GPIOC_BRR将GPIOC_0置位。
MCU中的内部外设的功能寄存器与存储器采用统一编址方式,将功能寄存器映射到固定的内存地址,STM32F103ZET6从0x40000000到0xBFFFFFFF的地址范围为内部外设功能寄存器的地址区间,RCC为0x40000000 + 0x00020000 +0x00001000,PortC为0x40000000 + 0x00010000 + 0x1000。根据STM32F1xx参考手册GPIOC_CRL的映射地址为0x40011000,GPIOC_CRH的映射地址为0x40011004,GPIOC_BSRR的映射地址为0x40011010,GPIOC_BRR的映射地址为0x40011014;
APB2外设时钟使能寄存器(RCC_APB2ENR) 的映射地址为0x40021018。
6、可以通过直接向这些地址赋值来设置MCU的内部外设的功能寄存器,从而控制它们的工作方式。
① APB2外设时钟使能寄存器(RCC_APB2ENR)的位含义:
要使能GPIOC就是将RCC_APB2ENR寄存器的第4为设为1。
② GPIOC_CRL寄存器的位含义:
如果要将GPIOC_0设为“通用推挽式输出,最大速度50MHz,则将GPIOC_CRL寄存器的3~0位设为0011。
③ GPIOC_BSRR寄存器的位含义:
如果要通过GPIOC_0输出低电平,就是将GPIOC_BSRR寄存器的位16设为1,如果要通过GPIOC_0输出高电平,就是将GPIOC_BSRR寄存器的位0设为1。
7、main.c的编程如下:
void SystemInit() { } void delay(int t) { int i; for( ;t>0; t--) for(i=0;i<1000;i++); } int main() {
*((unsigned int *)0x40021018) |= 0x1<<4; //开启GPIOC时钟 *((unsigned int *)0x40011000) &= ~(0x0F<<(4*0)); //对GPIOC_0设置为通用推挽输出,最大速度50MHz *((unsigned int *)0x40011000) |= (0x03<<(4*0)); while(1) { *((unsigned int *)0x40011010) |= 0x01<<(16+0); //对GPIOC_0复位 delay(1000); *((unsigned int *)0x40011010) |= 0x01<<(0+0); //对GPIOC_0置位 delay(1000); } } |
8、项目配置、编译链接生成hex文件
①项目配置,两种方式可以打开项目配置对话框
在"Output"选项卡中选择"Create HEX File"。
②生成目标文件
四、下载程序到开发版MCU中
打开“普中ISP自动下载”软件,按照MCU芯片选择芯片类型;按照与开发板连接的USB转串口选择串口号;选择合适的波特率;选择要下载的.hex文件(一般在项目文件夹下的"Objects"文件夹中),然后点击程序下载。
程序下载后,开发板上的第一个LED灯闪烁,数码管一段也闪烁。