一、Protues创建工程
添加好名称,不断下一步就行:
二、pretues添加原件,构建电路图;
二、keil做代码:
添加文件这里不做说明,注意一下几个点:
1.芯片使用stm32F103c6
2.mdk的汇编文件随之改变
3.宏定义改成stm32F103c6的宏
4.主函数代码实现:
#include "stm32f10x.h"
GPIO_InitTypeDef GPIO_InitStructure;
void delay(unsigned int ms)//时间不准确,只是一个简单的延迟
{
for(int i = 0;i < 1000;i++)
{
for(int j = 0;j < ms; j++);
}
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//初始化A口
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(GPIOA, &GPIO_InitStructure);
while (1)
{
for(int i = 0;i < 8;i++)//第一个灯到第8个
{
GPIOA->BSRR = (1 << i);
delay(100);//亮
GPIOA->BRR = (1 << i);
delay(100);//灭
}
for(int i = 0; i <8; i++)//8个同时亮灭8次
{
GPIOA->BSRR = 0xff;
delay(100);//亮
GPIOA->BRR = 0xff;
delay(100);//灭
}
}
}
#ifdef USE_FULL_ASSERT
#endif
5.mdk中的.s文件中的SystemInit函数没有实现入口,可能会产生链接错误,所以在stm32F103_gpio.c中添加函数实现,为空即可。
6.生成.hex文件
编译一下:
四、Protues电路图整合Keil生成的.Hex文件
protues中右击芯片编辑属性添加.hex文件(mdk/Objects/);.
五、实验结果:
1到8个灯分别开始亮灭
8个灯全亮全灭8次
实验结束。
七、实验总结:
整个流程比较简单容易理解,但是过程中遇到很多奇奇怪怪的问题,比如,pretues仿真失败,需要改正电源设计,配置tmp,temp环境变量等等,keil使用stm32F103c6芯片需要修改一些对应的配置,无法访问某些文件,需要使用管理员权限打开keil进行操作,等等。整个实验下来,对pretues和keil的使用更加熟悉,加深了对stm32类芯片的理解。