STM32
直播中

ningkui

12年用户 831经验值
擅长:电源/新能源
私信 关注
[问答]

STM32的调试流程有哪些

STM32的调试流程有哪些?
怎样去编写一种LED呼吸灯程序?

回帖(1)

盛文凤

2021-10-11 17:53:52
  1.工程简介与调试流程
  
  对ARM内核的基础文件,一般不需要修改。
  
  .c文件即库文件,要根据具体需要增减
  Startup启动文件,不需要修改
  User main.c是用户要编写的主程序文件。
  Stm32f10 it.c 不需要修改
  
  Basic中delay.c是我们要编写的延时程序函数
  sys.c 不需要修改
  Hardware中led.c和key.c 是我们用户自己编写的硬件驱动文件。
  总结:
  
  
  main函数下面的内容使我们单片机真正运行的内容。
  2.固件库
  
  功能配置寄存器。
  作软件和硬件之间的连接,多组32位的寄存器,由ARM内核来操纵,有很多功能内,每一位置零或置一都会使硬件部分有些变换。操作硬件就是操作SRAM中的功能配置寄存器。
  硬件到软件的层次
  
  要安装的固件库就是低层驱动程序。
  寄存器:寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑威廉希尔官方网站 ,但这种时序逻辑威廉希尔官方网站 只包含存储威廉希尔官方网站 。寄存器的存储威廉希尔官方网站 是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。
  具体固件库安装操作看视频教程。(第二十步)
  3.核心板的威廉希尔官方网站 分析
  核心板正反面威廉希尔官方网站 标注
  
  FT232串口芯片,把USB接口转换为TTL电平,使用这个串口与电脑进行交互。
  3.3V稳压芯片是为了把USB的5V电压转换为单片机可供电的电压。
  
  具体接口分析待补充
  4.点天灯仪式
  #include “stm32f10x.h” //STM32头文件
  #include “sys.h” //系统函数库文件
  #include “led.h”
  int main (void){
  RCC_Configuration();//时钟设置
  LED_Init();将 LED灯的接口初始化
  whlie(1){
  //方法1:
  GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));//LED1接口输出高电平1
  delay_us(50000);//延时1秒
  GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));//LED1接口输出低电平0
  delay_us(50000);//延时1秒
  //方法2:
  // GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1)));
  // delay_ms(500);//延时一秒
  }
  }
  
  初始化函数:所有IO端口在使用前都要进行初始化。内容:端口是用来输入还是输出,端口号是多少。
  结构体:TypeDef
  RCC_ABP2:在时钟层面启动对应IO端口及功能。
  
  5.更多点灯程序
  GPIO_WriteBit
  
  GPIO_ResetBits(专用于清零的函数)
  
  GPIO_SetBits(专用于将IO端口的置位,也就是输出高电平)
  
  GPIO_Write(对IO端口整组进行操作)
  
  6.LED闪灯程序
  #include“delay.h”
  delay_s() //秒
  delay_ms() //毫秒
  
  第一块是控制滴答定时器的,
  下面都是套用第一条的,
  初学会调用使用即可。
  注意:调用什么样级别的延时函数,及参数值在上面范围;当你的系统主频修改时在延时函数中也要对应修改。
  7.呼吸灯
  亮度随着时间逐渐变亮或变灭。
  (亮度占空比)
  程序名: LED呼吸灯程序
  硬件支持: STM32F103C8 外部晶振8MHz RCC函数设置主频72MHz
  修改日志:
  1-
  本模板加载了STM32F103内部的RCC时钟设置,并加入了利用滴答定时器的延时函数。
  可根据自己的需要增加或删减。
  #include “stm32f10x.h” //STM32头文件
  #include “sys.h”
  #include “delay.h”
  #include “led.h”
  int main (void){//主程序
  //定义需要的变量
  u8 MENU;//定义一个无符号8位
  u16 t,i;//无符号16位变量
  //初始化程序
  RCC_Configuration(); //时钟设置
  LED_Init();
  //设置变量的初始值
  MENU = 0;
  t = 1;
  //主循环
  while(1){
  //菜单0
  if(MENU == 0){ //变亮循环;//MENU菜单切换,菜单等于0运行下面的程序
  for(i = 0; i 《 10; i++){
  GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
  delay_us(t); //延时(微秒级)
  GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
  delay_us(501-t); //延时(501占空比的全部周期长度)
  }
  t++;(灯的亮度逐渐变亮)
  if(t==500){
  MENU = 1;//从当前菜单内容切换到其他菜单内容
  }
  }
  //菜单1
  if(MENU == 1){ //变暗循环
  for(i = 0; i 《 10; i++){
  GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
  delay_us(t); //延时
  GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
  delay_us(501-t); //延时
  }
  t--;
  if(t==1){
  MENU = 0;//又回到了上面的变亮循环
  }
  }
  }
  }
  【变量定义】
  u32 a; //定义32位无符号变量a(存放在SRAM)
  u16 a; //定义16位无符号变量a
  u8 a; //定义8位无符号变量a
  vu32 a; //定义易变的32位无符号变量a
  vu16 a; //定义易变的 16位无符号变量a
  vu8 a; //定义易变的 8位无符号变量a
  uc32 a; //定义只读的32位无符号变量a(存放在Flash)
  uc16 a; //定义只读 的16位无符号变量a
  uc8 a; //定义只读 的8位无符号变量a
  #define ONE 1 //宏定义
  delay_us(1); //延时1微秒
  delay_ms(1); //延时1毫秒
  delay_s(1); //延时1秒
  */
举报

更多回帖

发帖
×
20
完善资料,
赚取积分