你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32简单编程实例经验分享

[复制链接]
攻城狮Melo 发布时间:2023-3-29 17:38
一、STM 32程序
1.建立一个工程文件

2020100814593630.png

2.选择STM32芯片

2020100815005093.png

3.对所选芯片进行设置

20201008150211682.png


4.编写源程序

  1. //宏定义,用于存放stm32寄存器映射
  2. #define PERIPH_BASE           ((unsigned int)0x40000000)//AHB
  3. #define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
  4. #define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
  5. //GPIOA_BASE=0x40000000+0x10000+0x0800=0x40010800,该地址为GPIOA的基地址
  6. #define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
  7. //GPIOB_BASE=0x40000000+0x10000+0x0C00=0x40010C00,该地址为GPIOB的基地址
  8. #define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
  9. //GPIOC_BASE=0x40000000+0x10000+0x1000=0x40011000,该地址为GPIOC的基地址
  10. #define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
  11. //GPIOD_BASE=0x40000000+0x10000+0x1400=0x40011400,该地址为GPIOD的基地址
  12. #define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
  13. //GPIOE_BASE=0x40000000+0x10000+0x0800=0x40011800,该地址为GPIOE的基地址
  14. #define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
  15. //GPIOF_BASE=0x40000000+0x10000+0x0800=0x40011C00,该地址为GPIOF的基地址
  16. #define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)
  17. //GPIOG_BASE=0x40000000+0x10000+0x0800=0x40012000,该地址为GPIOG的基地址
  18. #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
  19. #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
  20. #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
  21. #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
  22. #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
  23. #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C   
  24. #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C

  25. #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
  26. #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))

  27. #define LED0  MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))
  28. //#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8
  29. //定义typedef类型别名
  30. typedef  struct
  31. {
  32.    volatile  unsigned  int  CR;
  33.    volatile  unsigned  int  CFGR;
  34.    volatile  unsigned  int  CIR;
  35.    volatile  unsigned  int  APB2RSTR;
  36.    volatile  unsigned  int  APB1RSTR;
  37.    volatile  unsigned  int  AHBENR;
  38.    volatile  unsigned  int  APB2ENR;
  39.    volatile  unsigned  int  APB1ENR;
  40.    volatile  unsigned  int  BDCR;
  41.    volatile  unsigned  int  CSR;
  42. } RCC_TypeDef;

  43. #define RCC ((RCC_TypeDef *)0x40021000)
  44. //定义typedef类型别名
  45. typedef  struct
  46. {
  47. volatile  unsigned  int  CRL;
  48. volatile  unsigned  int  CRH;
  49. volatile  unsigned  int  IDR;
  50. volatile  unsigned  int  ODR;
  51. volatile  unsigned  int  BSRR;
  52. volatile  unsigned  int  BRR;
  53. volatile  unsigned  int  LCKR;
  54. } GPIO_TypeDef;
  55. //GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的数据类型为GPIO_TypeDef
  56. #define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)

  57. void  LEDInit( void )
  58. {
  59.      RCC->APB2ENR|=1<<2;  //GPIOA 时钟开启
  60.      GPIOA->CRH&=0XFFFFFFF0;
  61.      GPIOA->CRH|=0X00000003;
  62. }

  63. //粗略延时
  64. void  Delay_ms( volatile  unsigned  int  t)
  65. {
  66.      unsigned  int  i,n;
  67.      for (n=0;n<t;n++)
  68.          for (i=0;i<800;i++);
  69. }

  70. int main(void)
  71. {
  72.          LEDInit();
  73.      while (1)
  74.      {
  75.          LED0=0;//LED熄灭
  76.          Delay_ms(500);//延时时间
  77.          LED0=1;//LED亮
  78.          Delay_ms(500);//延时时间
  79.      }
  80. }
复制代码

5.编译结果
二、程序的仿真调试
1.仿真前的设置

(1)点击魔法棒,进入设置界面

20201008151732933.png


(2) 进入debug界面,左侧选择Use Simulator,右侧选择ULINK2/ME Cortex Debugger,最后点击Settings

20201008151904500.png


(3) 进入setting界面,选择Autodelect

20201008151959579.png


2.开始调试
首先选择Start Debug,然后利用调试工具开始进行调试操作

20201008152045533.png


三、总结
安装pack installer的时候遇到了点麻烦,进行STM 32调试的时候遇到了诸多问题,通过这个练习,自己能够初步认识使用MDK建立一个工程,调试一个工程。但是缺少LED闪烁的仿真效果展示结果和过程。
————————————————
版权声明:小叮当-777
如有侵权请联系删除




收藏 评论0 发布时间:2023-3-29 17:38

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版