模板网站建设明细报价表,网络运营商,常用微信小程序api,终身免费vps下载
Keil 编译例程
编译两个按钮#xff0c;一个向下是部分编译#xff0c;两个向下箭头是全部编译。对于未编译文件两个按钮等效。
点击编译后#xff0c;linking 是链接#xff0c;结果里面的几个数据的意义代表大小#xff1a;
数据类型占用Flash or SRAM说明Code…下载
Keil 编译例程
编译两个按钮一个向下是部分编译两个向下箭头是全部编译。对于未编译文件两个按钮等效。
点击编译后linking 是链接结果里面的几个数据的意义代表大小
数据类型占用Flash or SRAM说明CodeFlash代码 占用 FLASH 的大小RO-DataFlash只读数据一般是指 const 修饰的数据RW-DataFlash and SRAM初值为非0的可读可写数据ZI-DataSRAM初值为0 的可读可写数据
前三项加起来是 FLASH 占用后两个是 SRAM 占用。
双击项目名会打开一个 .map 的文件文件末尾也显示了上面各项的大小和 FLASH SRAM 占用大小。
基于寄存器的方式和51单片机一样方法程序直接控制寄存器底层方法。但是 STM32 寄存器太多不宜用此方法。
基于库函数STM32 自己封装好的库函数。有利于提高开发效率。
基于 HAL 库的方式可以通过图形化界面开发。但是隐藏了底层逻辑。
基于寄存器
我们用和 51单片机一样的方法新建工程文件后是不能直接使用的。需要添加启动文件。
添加好启动文件和头文件后新建 User 文件夹代码模板如下
#include stm32f10x.h // Device header
int main(){while(1){}
}Configration 中编码设置为 UTF-8 防止中文乱码。
魔术棒-Debug-Use 改为 STLink 下载方式。右侧 Setting-Flash Download- 勾选 Reset and Run这样每次下载后都会重新自动复位运行。
STLINK 接上对应线后应该是电源灯常亮测试灯闪烁。
Build 并 Load 后板子上的测试灯应该不闪烁了。因为程序中目前什么也没有。
下面尝试点亮灯。需要三个寄存器。
RCC 寄存器。RCC 外设时钟使能寄存器翻阅手册可知是 APB2 的外设在 RCC_APB2ENR 中配置。 4 IOPC EN 使能即打开 GPIOC 时钟。即赋值0000 0000 0001 00000x00000010
PC13 口。MODE13 就是配置 PC13 口的。 CNF13 要设置为推挽输出模式即00. MODE 要配置为输出模式最大速度 50MHZ 11。所以寄存器赋值 0x0030 0000 端口输出寄存器写入数据。13 号口设置为低电平点亮。即0x00000000. 0x0000 2000 就会熄灭。 #include stm32f10x.h // Device headerint main(){RCC-APB2ENR0X00000010;GPIOC-CRH0X00300000;GPIOC-ODR0X00000000;while(1){}
}可以看出基于寄存器的程序编写非常麻烦要不断的查手册而且我们还不能影响到其他位不能这样直接赋值要通过 | 确保其他位不受影响。
基于库函数
新建 Library 文件夹添加老师给出的库函数文件。再在 MDK 中添加组。
再打开 STM32F10X.H 文件其中有一句
#ifdef USE_STDPERIPH_DRIVER#include stm32f10x_conf.h
#endif也就是说我们要定义这个东西才能包含这个头文件。再手动定义一下。 记得还要 include path。有钥匙标志的是只读文件。
#include stm32f10x.h // Device headerint main(){//查询函数的通用方法右键-转到定义查看如果详细信息在注释里复制注释关键词 crtl f 搜索。//enable clkRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//第一个参数外设第二个参数新的状态。//set PC13 pinGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_ModeGPIO_Mode_Out_PP;//通用推挽输出GPIO_InitStructure.GPIO_PinGPIO_Pin_13;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOC,GPIO_InitStructure);//set e level of PC13GPIO_SetBits(GPIOC,GPIO_Pin_13);//high level//GPIO_ResetBits(GPIOC,GPIO_Pin_13);//low levelwhile(1){}
}寄存器部分自己查找引脚写的内容在库函数中被封装我们只需要查询使用。
启动文件具体选择哪个STM32F100 是超值系列选择带 VL 的启动文件再根据 FLASH 大小选择 LD MD HD。STM32F101/102/103 选择 D 结尾的。STM32F105/107 选择 CL 的。 总结新建工程套路
新建 project选择对应芯片型号。新建 start library 文件夹复制相关配置文件。工程里新建对应的文件夹添加相应配置文件。include relevant path 头文件。define 内定义 USE_STDPERIPH_DRIVERdebug 中选择对应调试器STLINKsettings-flash download-reset and run 勾选。
当然以后也可以建立自己风格的项目。
启动程序的原理 复位中断程序入口。复位时启动会调用 system_xx.c 我们的程序中是 init和 main.c然后就结束了。
其他中断也在其中被初始化。定义在 stm32f10x_it.c 中。自己如果想定义中断系统建议写在 stm32f10x.c 中的 PPP_IRQHandler 处。
init 设置微控制器的启动初始化闪存接口等仅在复位后需要调用。
然后自己写的用户文件也在紫色部分初始化。有利于程序模块化。
右侧是被动执行的资源。右上角外设、内核外设。右下角封装的库函数文件。conf 头文件包含了所有头文件又被 stm32f10x.h 所包含。
GPIO 通用 IO
General Purpose Input Output.
可配置为8种输入输出模式。通常0~3.3V部分引脚允许 5V。
串口下载
flymcu 软件。
配置如下一定要一模一样串口可以不一样。我就因为低电平复位没看清一直没成功。 F1 波特率最大可以460800. F4 可以是76800.
启动模式M3 M4
BOOT1 BOOT0 对应 x0从主闪存存储器启动。
01系统存储器开始启动ISP 下载。
11内置 SRAM 开始启动。 运行还是要配置成 x0 存到主闪存中。为什么我们的电路可以只连接一次 00 就能下载到主存储器中 如果不靠一键下载电路我们就要像上面的步骤一样先 01 再 x0。
DAP 下载
暂时先空一下。因为博主没有买仿真器。