2021/10/11 智能家具 嵌入式实训 第一天 建立工程文件+烧录
实训目标:
使用的芯片介绍
STM32F103ZET6
查询该芯片?
(1) 内核:ARM 32位的cortex-M3 CPU
(2) 最大工作频率:72MHZ 存储:256-512K
Flash;
SRAM;
Debug模式:SWD/JTAD接口
左上角:内核以及下载接口
双向箭头:数据总线
STM产品命名规则
led 灯例程序
建立模板工程文件
ü 新建文件夹
ü 复制相关文件:
启动代码:\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
拷贝到startup中
ü STM32底层时钟配置代码:
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x system_stm32f10x.c/h
ü stm3210xh-STM32底层所有的寄存器结构体、宏定义e
ü 中断相关代码:stm32f10x_it.c/.h
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
stm32f10x_conf.h -- 不需要复制(后续库函数版本使用)
复制到
最终:
建立工程
ü 新建工程:
双击打开Keil软件:找到Project下的新建工程
选择保存的位置,工程命名;
选择芯片:STM32F103ZE
选择M3内核底层代码
运行环境搭建:
文件夹分类:
ü 往工程中添加文件:
ü 添加其他文件,.h不用添加,编译后自动包含。
ü 包含头文件路径:
USE_STDPERIPH_DRIVER,STM32F10X_MD
ü 新建main.c main.h
#include "main.h" int main(void) { LED_Config(ON); while(1); }
main.h
#ifndef _MAIN_H #define _MAIN_H #include "led.h" #endif
把api加上自己做的延时函数和led代码
delay.c
#include "delay.h" /*********************************************************************************** 函数功能: DELAY 函数接口 作者:XYD_ZH 时间:2021年9月7日15:50:32 ***********************************************************************************/ //1. 延时1us void Delay_nop_1us(void) { __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP(); } //2. 延时nus void Delay_nop_nus(u32 time) { while(time--) { Delay_nop_1us(); } } //3. 延时nms void Delay_nop_nms(u32 time) { while(time--) { Delay_nop_nus(1000); } }
led.c
#include "led.h" /*********************************************************************************** 函数功能: LED初始化 形参:condition -- 初始状态(ON、OFF) 返回值:无 作者:XYD_ZH 时间:2021年9月7日16:22:52 ***********************************************************************************/ /* 管脚: LED1 PE2 LED2 PE3 LED3 PE4 LED4 PE5 */ void LED_Config(int condition) { #if 1 /* 寄存器法 */ // 1.时钟使能 -- GPIOE端口时钟 RCC->APB2ENR |= (0x1<<6); // 2.模式配置(通用推挽输出) GPIOE->CRL &= ~(0xFFFF<<8); //清零 -- [23:8]位 GPIOE->CRL |= (0x3333<<8); //置位 // 3.初始状态 if(condition == OFF) GPIOE->ODR |= (0xF<<2); else GPIOE->ODR &= ~(0xF<<2); #else /* 库函数法 */ //1.时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); //2.模式配置 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOE, &GPIO_InitStructure); //3.初始状态 if(condition == OFF){ GPIO_SetBits(GPIOE,GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); } else{ GPIO_ResetBits(GPIOE,GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); } #endif } /*********************************************************************************** 函数功能: LED 函数接口 作者:XYD_ZH 时间:2021年9月7日16:22:52 ***********************************************************************************/ /* * 呼吸灯(模拟PWM波) */ void LED_Breath(void) { int i = 0; for(i=0;i<1000;i++) //逐渐变亮 { LED1(ON);LED2(ON);LED3(ON);LED4(ON); Delay_nop_nus(i); LED1(OFF);LED2(OFF);LED3(OFF);LED4(OFF); Delay_nop_nus(1000-i); } for(i=0;i<1000;i++) //逐渐变暗 { LED1(OFF);LED2(OFF);LED3(OFF);LED4(OFF); Delay_nop_nus(i); LED1(ON);LED2(ON);LED3(ON);LED4(ON); Delay_nop_nus(1000-i); } } /* * LED闪烁 */ void LED_Twinkle(void) { Delay_nop_nms(500); LED1_TOGGLE;LED2_TOGGLE;LED3_TOGGLE;LED4_TOGGLE; }
编译
ü 配置工程:
最后生成object-hex文件
hex文件就是编译烧录程序的文件
测试:同理添加如下两个文件到API文件下:
并将.c添加到工程中/.h路径配置进来;
编译,没有问题,填写主函数,编译下载即OK;
如何通过串口下载程序
- 安装驱动:CH340驱动
- 打开下载软件:FlyMCU
- 通过FlyMCU可执行Hex文件下载到板子上运行;
下载配置
关于时钟设定
如果我现在采用12MHz晶振,程序如何修改?
如果输入的12MHz晶振,修改倍频RCC_CFGR_PLLMULL9为RCC_CFGR_PLLMULL6
另外,需将外部高速时钟宏定义改为12MHZ
模板代码:
https://wwa.lanzoui.com/i2AKBv8k4eh
综上就是第一天实训内容
参考:
推荐b站视频:
正点原子
【挽救小白第一季】STM32+8266小程序智能家居毕设实战:
https://www.bilibili.com/video/BV1ae411W7yD?p=2