标题: 全球首发 全世界第一个protues 仿真stm32 f103 实现spi [打印本页]

作者: happy87    时间: 2017-9-4 17:55
标题: 全球首发 全世界第一个protues 仿真stm32 f103 实现spi
全球首发 全世界第一个protues 仿真stm32 f103 实现spi
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



stm32单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "spi.h"
  3. #include "Module.h"
  4. #include<stdio.h>
  5. void Delay_Ms(u16 time);
  6. void RCC_Configuration(void);
  7. //void GPIO_Configuration(void);
  8. u32 retry=0;       
  9. int i=0;

  10. /* Private functions ---------------------------------------------------------*/
  11. /*******************************************************************************
  12. * Function Name  : main
  13. * Description    : Main program.
  14. * Input          : None
  15. * Output         : None
  16. * Return         : None
  17. *******************************************************************************/
  18. int main(void)
  19. {

  20.           RCC_Configuration();//使能外设时钟
  21.         //GPIO_Configuration();
  22.         SEG_Init();
  23.         SPI1_Init();       
  24.         //SPI1_SetSpeed(SPI_BaudRatePrescaler_256);       
  25.        
  26.         //========实现数码管显示==========
  27.           while (1)
  28.           {
  29.                        
  30.                        

  31. SEG_Display(8830,0);
  32.                        
  33.                        
  34.                 /*for(i=0;i<9999;i++)
  35.                 {
  36.                         for(j=0;j<500;j++)
  37.                                 SEG_Display(i,0);
  38.                 }        */          
  39.                 //SEG_Display(1234,3);
  40.           }
  41. }

  42. /*******************************************************************************
  43. * Function Name  : Delay_Ms
  44. * Description    : delay 1 ms.
  45. * Input          : time (ms)
  46. * Output         : None
  47. * Return         : None
  48. *******************************************************************************/
  49. void Delay_Ms(u16 time)  //延时函数
  50. {
  51.         u16 i,j;
  52.         for(i=0;i<time;i++)
  53.                   for(j=1000;j>0;j--);
  54. }

  55. /*******************************************************************************
  56. * Function Name  : RCC_Configuration
  57. * Description    : Configures the different system clocks.
  58. * Input          : None
  59. * Output         : None
  60. * Return         : None
  61. *******************************************************************************/
  62. void RCC_Configuration(void)
  63. {
  64.         //==========================使用外部RC晶振========================================
  65.           RCC_DeInit();                                //初始化为缺省状态
  66.         //RCC_HSICmd(ENABLE);
  67.           RCC_HSEConfig(RCC_HSE_ON);  //高速时钟使能
  68.           while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);  //等待高速时钟使能就绪

  69.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);        //Enable Prefetch Buffer
  70.     FLASH_SetLatency(FLASH_Latency_2);                                                  // Flash 2 wait state
  71.     RCC_HCLKConfig(RCC_SYSCLK_Div1);                                                 // HCLK = SYSCLK
  72.     RCC_PCLK2Config(RCC_HCLK_Div1);                                                        // PCLK2 = HCLK
  73.     RCC_PCLK1Config(RCC_HCLK_Div2);                                                          // PCLK1 = HCLK/2
  74.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);        // PLLCLK = 8MHz * 9 = 72 MHz  
  75.     RCC_PLLCmd(ENABLE);                                                                                  // Enable PLL
  76.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);                // Wait till PLL is ready

  77.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                                  // Select PLL as system clock source
  78.     while(RCC_GetSYSCLKSource() != 0x08);                                        // Wait till PLL is used as system clock source
  79.        
  80.        
  81.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);        // 使能APB2外设GPIOA时钟
  82.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);        // 使能APB2外设GPIOB时钟
  83.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);        // 使能APB2外设GPIOC时钟
  84.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 , ENABLE);        // 使能APB2外设SPI1时钟
  85. }
复制代码

所有资料51hei提供下载:
protues stm32 f103 实现spi.rar (1.56 MB, 下载次数: 859)





作者: timo的小蘑菇    时间: 2017-9-27 09:16
你是哪个版本的protues呢
作者: happy87    时间: 2017-10-13 20:20
8.6 支持stm32
作者: qmh48696705    时间: 2017-10-16 18:13

学习下,初学不知道怎么入手
作者: tonyinspira    时间: 2018-3-13 08:42
请问大神们知道如何设置定时器吗?为什么程序在硬件上没有问题,但是在PROTUES上就不能正常跑。
作者: tonyinspira    时间: 2018-3-13 08:43
硬件上没有问题,Protues上却不能运行。
作者: avery423    时间: 2018-4-22 12:45
建议仿真成功的整理一下。这里面还有些疑问:
1,hex文件是用什么软件生成的,如果是keil,哪个版本?高版本的keil,元件库好你要单独下的,这个器件怎么下?
2,仿真程序里很多STM32的头文件,库文件,是元件包里自带吗》?
作者: dengyifenzhong    时间: 2018-4-23 09:46
收藏了,但是打开运行,好多问题呢,不知道怎么回事
作者: happy87    时间: 2018-4-23 20:17
回复楼上的问题:
1.stm32仿真不能用keil 4版本,必须用5版本以上,至于包怎么下这是基本操作
2.上传时所用文件都上传,只会多不会少,但是版主会为了减轻服务器压力,做一些删减
。你们到手的文件,我不知道
3.仿真用的stm32的spi模块,不是模拟spi,因此难度很大,为了体现效果放慢了速度。
4.我用的3.5的库无法仿真中断 和 I2C 这个是protues的自己的问题,但是能不能用hal库仿真,或者更专业的gcc编译器,我不清楚,个人能力精力有限,protues无法仿真中断是历史遗留问题,例如arm7用iar会出现bug,但在ADS下却可以仿真
5.上传程序本身是想抛砖引玉,希望更多的高手参与,来解决I2C中断,甚至更难的问题
作者: dengyifenzhong    时间: 2018-4-25 11:12
@楼主,但是打开程序直接不能运行,我简单写了一个led控制灯,也不行,不知道怎么回事,最后我直接led加电源,一端加地,运行,还是不行,不知道是不是我protue有问题吗
作者: happy87    时间: 2018-4-29 19:33
dengyifenzhong 发表于 2018-4-25 11:12
@楼主,但是打开程序直接不能运行,我简单写了一个led控制灯,也不行,不知道怎么回事,最后我直接led加电 ...

protues自带的例子行则行,使用前加载一下hex
作者: 失心恋2015    时间: 2018-4-30 15:27
这是protues哪个版本?
作者: happy87    时间: 2018-5-6 17:13
失心恋2015 发表于 2018-4-30 15:27
这是protues哪个版本?

8.6 以上都行
作者: lawrence2018    时间: 2018-5-27 19:29
好东西啊
作者: 见龙在田    时间: 2018-6-14 09:09
感谢分享,先拿来试试
作者: pengyongnet    时间: 2018-6-30 08:43
谢谢分享,学习了,感谢了
作者: pengyongnet    时间: 2018-6-30 08:44
感谢楼主的分享,开始学习下
作者: pengyongnet    时间: 2018-6-30 08:45
感谢楼主分享,有空的时候,不懂请教下你
作者: 蜘、蛛。    时间: 2018-8-6 14:20
遇到了些问题,提示电源没有配置
作者: happy87    时间: 2018-8-13 10:22
tonyinspira 发表于 2018-3-13 08:42
请问大神们知道如何设置定时器吗?为什么程序在硬件上没有问题,但是在PROTUES上就不能正常跑。

定时器的仿真我已经解决,但是是proteus自带的gcc for arm编译器,目前无法用keil
有一个bug,就是如果使用tm3或者tm2必须同时开启tm1中断,
以后会上传

作者: oliverlau2k11    时间: 2018-8-13 20:58
很棒的资料,已使用,谢谢
作者: dbxzjq    时间: 2018-8-25 19:33
感谢分享,等了许久的STM32仿真了
作者: ytouc317    时间: 2018-8-30 06:58
学习一些,加油
作者: bennyox    时间: 2018-9-5 11:19
感谢楼主,下了试试看。
作者: wangXJ    时间: 2018-9-22 09:32
CM3.DLL failed to create DSIM model for primitive type 'CM3_CORE'. [U1_CM3CORE]

提示出现这样的错误。是什么情况?
作者: goxp49    时间: 2018-10-29 16:52


学习下,初学不知道怎么入手
作者: onepcb    时间: 2018-11-1 21:45
谢谢分享!,,,,
作者: onepcb    时间: 2018-11-1 21:45
谢谢分享!,,,,
作者: 51hxgdd    时间: 2018-11-2 19:22
谢谢楼主
作者: 525215455    时间: 2018-11-24 12:37
谢谢分享!,,,,
作者: 瓶子    时间: 2018-11-27 19:45
学习下,开发板不方便,proteus方便点
作者: hujj    时间: 2018-11-28 10:55
我以为是下载proteus呢
作者: hujj    时间: 2018-11-28 10:57
我还以为是下载proteus呢。
作者: grodd    时间: 2018-12-10 18:24
谢谢分享!!!
作者: 下一秒    时间: 2018-12-20 11:13
刚解决定时器的问题 现在打开DAC定时器也不工作了 不知道打开AD会不会也有问题
作者: 我就要飞刀    时间: 2019-2-10 09:33
Vsm调试器
发生关键仿真错误。
我用的是Proteus 8.6
作者: liwjee    时间: 2019-2-26 11:18
过来看看学习学习
作者: xqtop    时间: 2019-3-2 21:42

感谢分享
作者: liuyw001    时间: 2019-3-29 14:40
多谢分享
作者: z1161948857    时间: 2019-4-16 14:42
问下楼主编程用的keil的哪个版本?
作者: dicarus    时间: 2019-5-4 22:47
下载学习一下

作者: blkhumor    时间: 2019-6-9 00:56
挺不错的,就是仿真得特慢
作者: longyo    时间: 2019-6-9 08:44
谢谢分享。。。。。
作者: long2022    时间: 2019-6-9 11:37
看一下学习学习,
作者: lhf58    时间: 2019-8-12 19:28

学习下,开发板不方便,proteus方便点
作者: lhf58    时间: 2019-8-13 13:23
学习下,初学不知道怎么入手
作者: bcdz    时间: 2019-8-13 14:50
支持!!!!
作者: 鹏博士PBs    时间: 2019-8-13 16:21
版本是8.6的吧
作者: wellmax_Goo    时间: 2019-8-13 17:37
谢谢楼主分享,感激不尽1
作者: 万古琴    时间: 2019-8-25 11:22
太棒了 能仿真运行  大赞 特赞!谢谢!
作者: 张明211    时间: 2019-10-20 09:02
资料不错,值得借鉴。
作者: 289254640    时间: 2020-1-28 21:19
感谢楼主分享!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1