stm32学习总结:3、Proteus8+STM32CubeMX+MDK很有搞头
文章目录
一、前言
前阵子用codesys的软PLC方案来仿真测试了PLC,以此研究了一阵子PLC和profinet,感触颇深,这种仿真软件还真是挺好用的,硬件软件化真的很方便。最近stm32上有个使用 ADAU1361进行录放音的研究,正好找到了仿真stm32的方案:Proteus,这个时候我发现这个不就是我们大学仿真C51的时候用的软件吗,时间太长不搞这块的开发感觉都快忘的差不多了,实际软件开发做多了感觉这类电子控制类的开发也变得有意思了,PLC、C51搞的有点返祖的感觉了。目前Proteus仿真stm32有一些型号还没有,但是作为基础研究学习是够了。此外,正好借着这个机会早点把stm32这块的一些基础开发总结完,也拖了不少时间了,后续有时间再进阶总结一下使用freertos+stm32cubemx相关的内容。
二、资料收集
Proteus安装:https://blog.csdn.net/weixin_44543463/article/details/116203188
Proteus使用资料:http://www.tup.tsinghua.edu.cn/upload/books/yz/051322-01.pdf
Proteus仿真stm32:https://blog.csdn.net/mistake11a/article/details/109555825
STM32CubeMX也再熟悉一下:https://www.st.com/resource/zh/user_manual/um1718-stm32cubemx-for-stm32-configuration-and-initialization-c-code-generation-stmicroelectronics.pdf
三、实际案例-点灯
1、Proteus8安装
参考对应博客直接下载安装即可,太过于详细了。
百度网盘链接:https://pan.baidu.com/s/1EHGewnvjcnEpPbXnR1qLIA
提取码: pr89
- (1)右键压缩包,进行解压。进入解压的文件夹,右键p8.9.sp0.exe文件,使用管理员身份打开。
- 这里可能有些机器会先弹出安装Visual C++的一个界面,一定要安装这些勾选的组件,否则后续安装会出现问题。
- (2)莫得选择,next
- (3)I accept,然后next
- (4)选择使用本地的激活证书license key。
- (5)继续next
- (6)这里会打开一个激活证书管理界面,点击左下角【Browse For Key File】,找到刚才解压出来的文件夹,里面解压后的【Proteus 8.9】文件夹中的【Crack】文件夹下的【Licence.lxk】文件,点击【打开】。
- (7)点击 【install】,在弹出的对话框询问是否继续,选择 【是】,安装完成后点击【Close】。
- (8)都不用勾选,直接【next】
- (9)这里选择安装方式,选择【Custom】,然后选择要安装的路径,注意:两个路径一定要一样,否则后期软件使用时会闪退。
- (10)这里不用管,默认【Next】就可以。
- (11)继续【Next】
- (12)点击【Install】开始安装,安装耗时一分钟左右。
- (13) 点击【Close】,不要运行Proteus
- (14)再次进入安装包解压后的【Proteus 8.9】文件夹中的【Crack】文件夹,选择所有文件【复制】。
- (15) 在桌面找到【Proteus 8.9】的快捷方式,右键点击【打开文件所在的位置】
- (16) 在空白处【右键-粘贴】,将刚才那三个文件复制过来。
- (17) 右键粘贴后的【pp8.9】选择【以管理员身份运行】。(运行完成后不会弹出任何对话窗,运行一下就可以),建议关闭各种安全管家之后再运行。
- (18) 再次打开解压后的【Proteus 8.9】文件夹,鼠标右击【Translations】选择【复制】。
- (19)再次右键桌面【Proteus 8.9】的快捷方式,右键点击【打开文件所在的位置】
- (20)点击路径中的【Proteus】文件夹,回到上一级。
- (21)在空白处【右键-粘贴】,将刚才复制的Translation文件夹粘过来,可能会有27/28个同名文件,点击【替换目标中的文件】。
- (22)进入【C:\Program Files (x86)\Labcenter Electronics】目录下,有一个【Proteus 8 Professional】文件夹,进入此文件夹,【全选-复制这两个文件夹】。
- (23)回到Proteus的安装路径(同19、20步),【右键粘贴,替换目标文件】
- (24)至此,安装完成!
2、Proteus创建stm32F013C6项目并添加外围LED电路
目前我们一般使用的最小板大多为F103C8T6,Proteus上没有C8的,但是在论坛上找到C6的引脚基本和C8是一样的(http://www.51hei.com/bbs/dpj-185185-1.html),只是Flash和RAM小一点,从下图看F103C4和F103CB也是可以作为简单demo来匹配C8的:
创建工程很简单,因为是中文版所以基本上应该都能看懂:
- (1)新建工程
- (2)选择默认模板
- (3)默认不创建PCB布版设计
- (4)创建固件,选择相关STM32F103C6的固件,编译器选择MDK带的即可,也可以自己配置arm gcc
- (5)然后下一步并完成即可:
- (6)添加元器件
添加LED-RED:
添加电阻:
- (7)然后简单布线一下,这里需要相关的电子知识,一般LED需要的电流大小,设置的电阻大小、电压值计算、串并联等等,否则灯就亮不起来,或者实际硬件设计时导致烧掉元器件等问题:
3、STM32CubeMX配置F103C6引脚生成MDK工程
接着我们需要开发程序控制STM32F103C6的PA1-PA8输出电平来使得LED亮灭,这里我们锻炼使用STM32CubeMX来配置相关引脚,关于STM32CubeMX的安装之前已经有一些接触,这个还是比较推荐的,确实会省不少事。
- (1)进入MCU选择界面:
- (2)左上角搜索STM32F103C6,之后选择一个型号即可,我们选择默认的第一个,之后选择开始项目:
- (3)配置相关引脚(这里设置PA1-PA8为GPIO输出)
- (4)时钟配置和Tools我们这里先不需要,在项目管理这里设置工程路径和工具链IDE即可(MDK这里选择MDK-ARM即可):
最后点击右上角的GENERATE CODE生成代码即可,生成完成直接打开工程就进入MDK软件页了。
4、MDK编译生成hex文件
- 1、点击魔法棒进入配置页面
- 2、在配置页面的Output这里配置生成HEX文件
- 3、写完代码最后进行编译或者重编译生成hex文件
这里我们控制GPIO的拉高拉低来闪烁LED灯,代码如下(主要是main.c的相关位置添加循环延时控制寄存器,也可以按部就班的写GPIO引脚的拉高拉低):
c
...
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;
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
GPIOA->BSRR = 0xff;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
for(i = 0; i < 8; i++)
{
delay_ms(99000);
GPIOA->BRR = (1 << i);
delay_ms(99000);
GPIOA->BSRR= (1 << i);
}
for(i = 0; i < 8; i++)
{
delay_ms(99000);
GPIOA->BRR = 0x000000ff;
delay_ms(99000);
GPIOA->BSRR = 0x000000ff;
}
}
/* USER CODE END 3 */
}
...
生成的hex文件位置(MDK项目目录下):
5、Protens导入hex文件进行仿真
Proteus工程中双击元器件导入hex文件:
然后调试->开始仿真即可:
四、最后
Proteus确实好用,有的时候比开发板甚至面包板都好用,用于学习研究再好不过了,也避免了电路设计错误烧掉板子等问题,使用过程中也算是简单锻炼了设计电路的能力,但是有的时候相关的元器件型号缺失就显得比较鸡肋,从大学那时候学习的记忆看似乎更适合去仿真C51系列的单片机作为教学之类的。(比如我这里需要ADAU1361和STM32F411,但是相关元器件导入要登录之类的,甚至需要自己去设计电路图导入导出,这个时候就比较麻烦了,这对于一些新手就比较劝退,折腾不少时间,最后实际项目可能还有差异,所以有能力入手开发板和面包板的还是比较推荐这种方式,如果实在手头有限但有时间折腾的可以啃一下Proteus,还是可以省不少钱的;我后续会根据自己手头有的元器件来选择使用proteus还是实际元器件操作进行总结,我们也不必拘泥于这些外物,学到知识才是关键。)