【嵌入式】简单stm32程序的运行与Proteus的仿真测试

    科技2025-09-23  63

    简单stm32程序的运行与Proteus的仿真测试

    由于第一次使用keil5,多次尝试未能成功一次,故使用【学者-老栋】的固件包进行实验与测试来熟悉mdk开发环境和Proteus电路仿真软件。

    参考:Proteus仿真STM32流水灯实验例程、详细步骤.

    实验要求8个led灯依次闪烁,然后8个灯同时闪烁8次,依次重复。

    1.创建Proteus工程

    File→New Project新建项目,并输入工程名和存储路径。 Next

    Next 先选择Create Firmvare Project,然后在Family中选择Cortex-M3,在Controller中选择STM32F103R6。 接下来选择Next和Finsh就完成了工程的创建。

    2.配置实验原件

    项目创建完成后即显示所选芯片与电源。 添加实验灯:点击左侧p,在keyword中输入LED-YELLOW找到灯,并点击确定。 左侧选中LED-YELLOW后,使用框内按钮进行旋转。 添加实验电阻:同样点击P,在keyword中输入RES找到电阻,点击确定。 双击电阻原件,将其阻值由10k改为50,若阻值过大led灯不亮。

    电路如图,选用PC0~PC7端口分别与灯1至灯8相连,并将电阻与电源相连。

    3.生成hex文件

    使用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; } } }

    4.配置芯片

    双击芯片,在Program File中找到刚生成的hex文件,并可在Crystal Frequency处设置晶振为2M。

    5.实验结果

    8个led灯依次闪烁,然后8个灯同时闪烁8次,依次重复。

    Processed: 0.014, SQL: 8