日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

新手入门 keil MDK5 建立STM32工程

發(fā)布時(shí)間:2025/4/16 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新手入门 keil MDK5 建立STM32工程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

keil uvison 是用來(lái)開(kāi)發(fā) 單片機(jī)的,Keil mdk 是用來(lái)開(kāi)發(fā) ARM 的。

芯片型號(hào)是:STM32F103RB6

1,新建工程

配置屬性

晶振為8M 根據(jù)實(shí)際晶振選擇

生成 HEX 文件,選中

?

2,復(fù)制啟動(dòng)文件,頭文件,這里為了簡(jiǎn)單,全部放在了項(xiàng)目文件夾中,不像有的教程,要建這個(gè),配置那個(gè),新手容易頭大。

啟動(dòng)文件在,STM32F10x_StdPeriph_Lib_V3.5.0.rar 里面,解壓LIB庫(kù)文件。

復(fù)制?STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 里面的?core_cm3.h?core_cm3.c 到項(xiàng)目文件夾中。

復(fù)制?STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 里面的 3個(gè)文件?stm32f10x.h?system_stm32f10x.c ?system_stm32f10x.h 到項(xiàng)目文件夾中。

復(fù)制啟動(dòng)文件?STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 里面的?startup_stm32f10x_md.s

md hd ld 根據(jù)芯片F(xiàn)LASH 容量決定用哪個(gè)。

16K < FLASH < 32K ld
64K < FLASH < 128K md
256K < FLASH < 512K hd

文件復(fù)制好以后就是這個(gè)樣子。

雙擊,添加文件到項(xiàng)目中。

?

新建一個(gè) main.c 文件,并添加到項(xiàng)目中。

1 #include "stm32f10x.h" 2 #include "bitband.h" 3 4 void delay() 5 { 6 int i=30000; 7 while(i--); 8 } 9 10 int main(void) 11 { 12 //初始化引腳 13 //PA2 接 BEEP 14 //初始化 PA 時(shí)鐘 15 RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; 16 //配置引腳模式 17 GPIOA->CRL &= ~(0x3<<(4*2+2)); 18 GPIOA->CRL |= 0x3<<(4*2); 19 20 while(1) 21 { 22 GPA_ODR(2) = 1; 23 delay(); 24 GPA_ODR(2) = 0; 25 delay(); 26 } 27 return 0; 28 }

?

bitband.h 是一個(gè) bit 位映射功能 操作時(shí)簡(jiǎn)單,不用比較位,節(jié)省時(shí)間。 1 /** 2 * (*(volatile unsigned long *) 是 先把一個(gè) long 數(shù)字轉(zhuǎn)為指針 在加 * 就是取它的內(nèi)容 3 * volatile 是告訴編譯器不要優(yōu)化 4 */ 5 #define BITBAND(addr, bitnum) ((addr&0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 6 #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) 7 #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) 8 9 #define GPA_IDR(n) BIT_ADDR(GPIOA_BASE+0x8, n) 10 #define GPB_IDR(n) BIT_ADDR(GPIOB_BASE+0x8, n) 11 #define GPC_IDR(n) BIT_ADDR(GPIOC_BASE+0x8, n) 12 #define GPD_IDR(n) BIT_ADDR(GPIOD_BASE+0x8, n) 13 #define GPE_IDR(n) BIT_ADDR(GPIOE_BASE+0x8, n) 14 15 #define GPA_ODR(n) BIT_ADDR(GPIOA_BASE+0xc, n) 16 #define GPB_ODR(n) BIT_ADDR(GPIOB_BASE+0xc, n) 17 #define GPC_ODR(n) BIT_ADDR(GPIOC_BASE+0xc, n) 18 #define GPD_ODR(n) BIT_ADDR(GPIOD_BASE+0xc, n) 19 #define GPE_ODR(n) BIT_ADDR(GPIOE_BASE+0xc, n) 20 #define GPF_ODR(n) BIT_ADDR(GPIOF_BASE+0xc, n) 21 22 #define GPA_BSRR(n) BIT_ADDR(GPIOA_BASE+0x10, n) 23 #define GPB_BSRR(n) BIT_ADDR(GPIOB_BASE+0x10, n) 24 #define GPC_BSRR(n) BIT_ADDR(GPIOC_BASE+0x10, n) 25 #define GPD_BSRR(n) BIT_ADDR(GPIOD_BASE+0x10, n) 26 #define GPE_BSRR(n) BIT_ADDR(GPIOE_BASE+0x10, n) 27 #define GPF_BSRR(n) BIT_ADDR(GPIOF_BASE+0x10, n) 28 29 #define GPA_BRR(n) BIT_ADDR(GPIOA_BASE+0x14, n) 30 #define GPB_BRR(n) BIT_ADDR(GPIOB_BASE+0x14, n) 31 #define GPC_BRR(n) BIT_ADDR(GPIOC_BASE+0x14, n) 32 #define GPD_BRR(n) BIT_ADDR(GPIOD_BASE+0x14, n) 33 #define GPE_BRR(n) BIT_ADDR(GPIOE_BASE+0x14, n) 34 #define GPF_BRR(n) BIT_ADDR(GPIOF_BASE+0x14, n)

這里的 0xc 0x8 0x10 就是根據(jù) 寄存器的位置來(lái)決定的。

轉(zhuǎn)載于:https://www.cnblogs.com/ningci/p/5555303.html

總結(jié)

以上是生活随笔為你收集整理的新手入门 keil MDK5 建立STM32工程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。