由于第一次使用keil5,多次尝试未能成功一次,故使用【学者-老栋】的固件包进行实验与测试来熟悉mdk开发环境和Proteus电路仿真软件。
参考:Proteus仿真STM32流水灯实验例程、详细步骤.
实验要求8个led灯依次闪烁,然后8个灯同时闪烁8次,依次重复。
File→New Project新建项目,并输入工程名和存储路径。 Next
Next 先选择Create Firmvare Project,然后在Family中选择Cortex-M3,在Controller中选择STM32F103R6。 接下来选择Next和Finsh就完成了工程的创建。
项目创建完成后即显示所选芯片与电源。 添加实验灯:点击左侧p,在keyword中输入LED-YELLOW找到灯,并点击确定。 左侧选中LED-YELLOW后,使用框内按钮进行旋转。 添加实验电阻:同样点击P,在keyword中输入RES找到电阻,点击确定。 双击电阻原件,将其阻值由10k改为50,若阻值过大led灯不亮。
电路如图,选用PC0~PC7端口分别与灯1至灯8相连,并将电阻与电源相连。
使用keil5打开项目,右键Target1选择Options for Target1,在Output栏中将Create HEX File打勾,而上面的Select Folder for Objects可以选择生成hex文件的存储路径。 先后进行Translate和Build。 编译测试后没有报错,即已生成hex文件。 main.c中源代码如下:
#include "stm32f10x.h" GPIO_InitTypeDef GPIO_InitStructure; void delay_ms(uint32_t ms) { uint32_t i_cnt,j_cnt; for(i_cnt=0;i_cnt<3000;i_cnt++); for(j_cnt=0;j_cnt<ms;j_cnt++); } uint32_t i; int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIOC->BSRR=0xff; while (1) { for(i=0;i<8;i++) { delay_ms(99000); GPIOC->BRR=(1<<i); delay_ms(99000); GPIOC->BSRR=(1<<i); } for(i=0;i<8;i++) { delay_ms(99000); GPIOC->BRR=0x000000ff; delay_ms(99000); GPIOC->BSRR=0x000000ff; } } }双击芯片,在Program File中找到刚生成的hex文件,并可在Crystal Frequency处设置晶振为2M。
8个led灯依次闪烁,然后8个灯同时闪烁8次,依次重复。