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

STM32入门-建立点亮LED的工程

[复制链接]
STMCU小助手 提问时间:2021-3-4 10:04 /
STM32入门-建立点亮LED的工程
   
本文通过点亮LED的简单例子,梳理以下如何使用STM32开发工具Keil建立工程。

  假设你手里有STM32的开发板。

    建立一个存放工程的文件夹,命名为LED。

3.1.png

    打开开发工具Keil,Project-New,建立工程。

3.2.png

    工程存放位置选择上面创建的文件夹,存储。   

3.3.png

    根据手上开放板的芯片型号,选择对应的STM32芯片。

3.4.png

    提示“复制汇编文件startup_stm32f10x_md.s到项目文件夹,并添加到项目”,选择“是”,这样Keil就帮我们建立了启动文件。

3.5.png

    点击New按钮,建立一个文本文件。

3.6.png

    输入C语言中的main函数,Ctrl+S保存到LED文件夹下。

3.7.png

    工程文件夹上右键,将文件添加到工程中。

3.8.png

   main.c出现在了工程目录中,如下图。

3.9.png

    在main.c中添加SystemInit函数。

3.10.png

    保存后,编译,程序没有报错,STM32的工程建立完成了。

    复制下面的代码,粘贴到SystemInit函数中。


  1. #define PERIPH_BASE           ((unsigned int)0x40000000)
  2. #define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
  3. #define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
  4. #define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
  5. #define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
  6. #define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
  7. #define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
  8. #define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
  9. #define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)
  10. #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
  11. #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
  12. #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
  13. #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
  14. #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
  15. #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C   
  16. #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C  

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


  19. #define LED0  MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))
  20. //#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8
  21. typedef struct
  22. {
  23.   volatile unsigned int CR;
  24.   volatile unsigned int CFGR;
  25.   volatile unsigned int CIR;
  26.   volatile unsigned int APB2RSTR;
  27.   volatile unsigned int APB1RSTR;
  28.   volatile unsigned int AHBENR;
  29.   volatile unsigned int APB2ENR;
  30.   volatile unsigned int APB1ENR;
  31.   volatile unsigned int BDCR;
  32.   volatile unsigned int CSR;
  33. } RCC_TypeDef;

  34. #define RCC ((RCC_TypeDef *)0x40021000)

  35. typedef struct
  36. {
  37. volatile unsigned int CRL;
  38. volatile unsigned int CRH;
  39. volatile unsigned int IDR;
  40. volatile unsigned int ODR;
  41. volatile unsigned int BSRR;
  42. volatile unsigned int BRR;
  43. volatile unsigned int LCKR;
  44. } GPIO_TypeDef;

  45. #define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)

  46. void LEDInit(void)
  47. {
  48.   RCC->APB2ENR|=1<<2; //GPIOA 时钟开启
  49.   GPIOA->CRH&=0XFFFFFFF0;
  50.   GPIOA->CRH|=0X00000003;   
  51. }

  52. //粗略延时
  53. void Delay_ms(volatile unsigned int t)
  54. {
  55.   unsigned int i,n;
  56.   for(n=0;n<t;n++)
  57.     for(i=0;i<800;i++);
  58. }

  59. int main(void)
  60. {
  61.   LEDInit();
  62.   while(1)
  63.   {
  64.     LED0=0;
  65.     Delay_ms(500);
  66.     LED0=1;
  67.     Delay_ms(500);
  68.   }
  69. }

  70. void SystemInit(void)
  71. {
  72.   
  73. }
复制代码

    单击魔术棒,点开配置选项。

3.11.png

    在“Create HEX File”上打勾。

3.12.png

    在这里用的是J-Link仿真器。

3.13.png

    点击“Build”,如果“0 warnings,0errors”,就可以点击“Load”下载程序到开发板观察效果。

3.14.png

文章出处: STM32嵌入式开发

收藏 评论1 发布时间:2021-3-4 10:04

举报

1个回答
丰满富饶 回答时间:2021-7-11 10:45:36
不错谢谢辛苦了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版