一、硬件基础
1、开发板:STM32-PZ6806L
2、MCU型号:STM32F103ZET6
(1)内核:32位 高性能ARM Cortex-M3处理器。时钟:高达72M,实际还可以超频一点。单周期乘法和硬件除法。
(2)IO口:STM32F103ZET6: 144引脚 112个IO,大部分IO口都耐5V(模拟通道除外),支持调试:SWD和JTAG,SWD只要2根数据线
(3)存储器容量:512K FLASH,64K SRAM
(4)时钟,复位和电源管理:
① 2.0~3.6V电源和IO电压
② 上电复位,掉电复位和可编程的电压监控
③ 强大的时钟系统
-4~16M的外部高速晶振
-内部8MHz的高速RC振荡器
-内部40KHz低速RC振荡器,看门狗时钟
-内部锁相环(PLL,倍频),一般系统时钟都是外部或者内部高速时钟经过PLL倍频后得到
- 外部低速32.768K的晶振,主要做RTC时钟源
(5)低功耗:
-睡眠,停止和待机三种低功耗模式
-可用电池为RTC和备份寄存器供电
(6)AD:3个12位AD(多达21个外部测量通道)
-转换范围:0-3.6V(参考电源电压)
-内部通道可以用于内部温度测量
-内置参考电压
(7)DA:2个12位DA
(8)DMA:12个DMA通道(7通道DMA1,5通道DMA2),支持外设:定时器,ADC,DAC,SDIO,I2S,SPI,I2C,和USART
(9)定时器:多达11个定时器
-4个通用定时器
-2个基本定时器
-2个高级定时器
-1个系统定时器
-2个看门狗定时器
(10)通信接口:多达13个通信接口
-2个I2C接口
-5个串口
-3个SPI接口
-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
md (Medium-density) 中容量 64-128K
hd (High-density) 大容量 256-512K
xl 超大容量 512-1024K
这些都是基本型的,包括STM32F101xx, STM32F102xx 和 STM32F103xx
vl (value line devices) 超值型系列大家记住:这个只有STM32F100xx,也就是说只要是vl那一定是STM32F100的启动文件,其他的不予考虑
下面还有个特殊的:
cl (Connectivity line devices) 互联型有STM32F105xx和STM32F107xx
启动文件负责执行微控制器从“复位”到“开始执行main函数”中间这段时间(称为启动过程)所必须进行的工作。
(1) 初始化堆栈指针SP=_initial_sp
(2) 初始化PC指针=Reset_Handler
(3) 初始化中断向量表
(4) 配置系统时钟
(5) 调用C库函数_main 初始化用户堆栈,从而最终调用main函数
启动文件可以从STM32芯片包安装路径中获取
(Keil_v5ARMPackKeilSTM32F1xx_DFP2.1.0DeviceSourceARM)
或者从项目例程文件夹中获取。
4、程序下载软件,使用该软件通过板载USB转串口将PC端Keil5环境下编译生成的.hex文件下载到开发版的MCU中。
三、项目创建
1、新建项目文件夹;(例如:F:STM32projectregtemp)
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灯闪烁,数码管一段也闪烁。
上一篇:直接通过寄存器地址操作控制LED灯(定义常量标示对应寄存器)
下一篇:STM32 USB学习笔记9
推荐阅读最新更新时间:2024-11-07 20:50
设计资源 培训 开发板 精华推荐
- DER-979 - 使用 InnoSwitch4-CZ PowiGaN 和 ClampZero 的 100 W 入墙式 USB 插座,具有可选输出电压
- TypeC转DP视频输出模块
- ATMEGA128A开发板第三版
- AD8034AR高速峰值检波器有限输入范围的典型应用电路
- LT3973HMSE-3.3 12V 降压转换器的典型应用
- 全球首款ARM核航空航天级芯片,SAMRH71F20-EK 评估套件(原理图等)
- 基于GL3224-QFN48主控EMMC读写方案
- 使用 ROHM Semiconductor 的 BD48E37G-TR 的参考设计
- LNA_AT41511_1090M
- L7818C 电流调节器的典型应用