3.创建好后,会发现组内为空白,将我们下载的STM32标准库放入我们的工程内部,方便查找,下面给出了具体地址
CMSIS:STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport USER:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template FWLIB:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src STARTUP:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 注:startup只需要其中的startup_stm32f10x_hd.s、startup_stm32f10x_ld.s、startup_stm32f10x_md.s
创建好工程后应该由图所示 点击进入该工程的"main.c"函数,点击编译,如果编译不出错,即成功地建立了自己的第一个工程。
点击进入"main.c"函数,点击编译(shift+F7)后能够正常运行,于是将其程序修改为自己的程序 由于自身实力的不足,所以在网上查找到了该板子的程序并且使用了它:)
点击编译后
(注:前几次的编译出现了很多次问题,我将失误省略掉了,如果有报错的情况请及时向他人求助或独立解决问题。)
最终程序没有报错,可以正常地使用它,但由于没有硬件,只能做程序的编译和仿真测试,无法下载到硬件上运行,所以无法让大家看到这个最基本的亮灯灭灯实验,但以后一定会让它亮起来😃
附main.c源码:
#include"stm32f10x.h" #define ON 1 #define OFF 0 #define DELAY_TIME 0x3FFFFF enum { LED1 = 0, LED2, LED3, MAX_LED, }; typedef struct led_gpio_s { int num; /* LED编号 */ GPIO_TypeDef *group; /* LED使用的GPIO在哪一组: GPIOB or GPIOD */ uint16_t pin; /* LED使用的GPIO组中的那一个pin: GPIO_Pin_x */ } led_gpio_t; led_gpio_t leds_gpio[MAX_LED] = { {LED1, GPIOB, GPIO_Pin_5}, /* LED1 用的GPB5 */ {LED2, GPIOD, GPIO_Pin_6}, /* LED2 用的GPD6 */ {LED3, GPIOD, GPIO_Pin_3}, /* LED3 用的GPD3 */ }; void init_led_gpio(void) { int i; GPIO_InitTypeDef GPIO_InitStructure; /* 使能PB和PD组 GPIO的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE); /*设置 PB5(LED1), PD6(LED2), PD3(LED3)为 GPIO 输出推免模式,口线翻转速度为50MHz */ for(i=0; i<MAX_LED; i++) { /*设置 PB5(LED1)为 GPIO 输出推免模式,口线翻转速度为50MHz */ GPIO_InitStructure.GPIO_Pin = leds_gpio[i].pin; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(leds_gpio[i].group, &GPIO_InitStructure); } } void turn_led(int which, int cmd) { if(which<0 || which> MAX_LED ) return; if(OFF == cmd) GPIO_ResetBits(leds_gpio[which].group, leds_gpio[which].pin); else GPIO_SetBits(leds_gpio[which].group, leds_gpio[which].pin); } void Delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--) ; } int main(void) { /* 初始化系统时钟 */ SystemInit(); /* 初始化各个LED的GPIO管脚 */ init_led_gpio(); while(1) { /* 把LED1、LED2、LED3点亮 */ turn_led(LED1, ON); turn_led(LED2, ON); turn_led(LED3, ON); Delay(DELAY_TIME); /* 把LED1、LED2、LED3灭掉 */ turn_led(LED2, OFF); turn_led(LED1, OFF); turn_led(LED3, OFF); Delay(DELAY_TIME); } }构建好MDK5中的板子后,接下来我们来学习proteus8中电路的构建,首先,根据网上的资料,找到了几个基本的零件
具体步骤:点击pick( P ),在其中搜索你需要的零件并且双击备用。 选择好所需零件后在mode中找到电源(POWER)以及地线(GROUND) 将元件拖拽上来并连线,连接好后如图所示。 点击Tool->Electrical Rules Cheak,检查电路是否符合逻辑,显示 No ERC errors found则电路连接正确
由于我的MDK5并没有这块板子,所以我正在准备连接STM32的电路板,总得来说这次实验进行得十分有意义,让我学习到了MDK5的编译方式以及MDK5与proteus的共同编译模式,期待下次实验中我可以做到更好,让我电路中的灯闪出不同的模式!