找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 25721|回復(fù): 29
打印 上一主題 下一主題
收起左側(cè)

Proteus+stm32f103c6串口仿真程序及注意事項(xiàng)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在用proteus 仿真 stm32f103c6串口時(shí),發(fā)現(xiàn)stm32主頻不能超過(guò)55MHz,參見(jiàn)proteus的 sample project,我把倍頻系數(shù)設(shè)為6,同時(shí)仿真主頻需設(shè)為倍頻系數(shù)*8M(晶振頻率),串口波特率不受限制。參見(jiàn)附件

proteus仿真串口前必讀事項(xiàng)
1、    proteus Virtual Terminal 串口波特率沒(méi)有限制(推薦9600;)
2、    但對(duì)于倍頻系數(shù) RCC_PLLMul_*,*的取值似乎只能是6以下,否則Virtual Terminal顯示亂碼。
在sys.c中設(shè)置(洋桃電子例程;野火似乎沒(méi)把設(shè)置RCC頻率程序單列出來(lái))
/*設(shè)置PLL時(shí)鐘源及倍頻系數(shù)*/   
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_5); //RCC_PLLMul_x(枚舉2~16)是倍頻值。當(dāng)HSE=8MHZ,RCC_PLLMul_9時(shí)PLLCLK=72MHZ   
3、    雙擊proteus原理圖中stm32元件,載入*.elf文件時(shí),彈出如圖2的窗口,頻率必須設(shè)為8MHz* RCC_PLLMul_*,其中*<=6, 8MHz為stm32f103c6的外接晶振頻率(proteus仿真庫(kù)沒(méi)有stm32f103c8)。



仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include "stm32f10x.h" //STM32頭文件
  2. #include "sys.h"
  3. #include "delay.h"

  4. #include "usart.h"


  5. int main (void){//主程序
  6.         RCC_ClocksTypeDef     RCC_Clocks;
  7.         u8 a=7,b=8;
  8.         //初始化程序
  9.         RCC_Configuration(); //時(shí)鐘設(shè)置
  10.         
  11.         
  12.   RCC_GetClocksFreq(&RCC_Clocks);

  13.         
  14.         USART1_Init(4800); //串口初始化(參數(shù)是波特率)

  15.         //主循環(huán)
  16.         while(1){

  17.                 /* 發(fā)送方法1 */
  18. //                USART_SendData(USART1 , 0x55); //發(fā)送單個(gè)數(shù)值
  19. //                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); //檢查發(fā)送中斷標(biāo)志位

  20.                 /* 發(fā)送方法2 */
  21. //                printf("STM32F103 "); //純字符串發(fā)送數(shù)據(jù)到串口

  22. //                printf("STM32 %d %d ",a,b); //純字符串和變量發(fā)送數(shù)據(jù)到串口,a符號(hào)變量
  23.                  
  24.                 /* 發(fā)送方法3 */
  25.                 USART1_printf("STM32 %d %d ",a,b);

  26.         delay_ms(1000); //延時(shí)
  27.         }
  28. }


  29. 【變量定義】
  30. u32     a; //定義32位無(wú)符號(hào)變量a
  31. u16     a; //定義16位無(wú)符號(hào)變量a
  32. u8     a; //定義8位無(wú)符號(hào)變量a
  33. vu32     a; //定義易變的32位無(wú)符號(hào)變量a
  34. vu16     a; //定義易變的 16位無(wú)符號(hào)變量a
  35. vu8     a; //定義易變的 8位無(wú)符號(hào)變量a
  36. uc32     a; //定義只讀的32位無(wú)符號(hào)變量a
  37. uc16     a; //定義只讀 的16位無(wú)符號(hào)變量a
  38. uc8     a; //定義只讀 的8位無(wú)符號(hào)變量a

  39. #define ONE  1   //宏定義

  40. delay_us(1); //延時(shí)1微秒
  41. delay_ms(1); //延時(shí)1毫秒
  42. delay_s(1); //延時(shí)1秒

  43. */
復(fù)制代碼

所有資料51hei提供下載:
7USART—串口通信.7z (888.46 KB, 下載次數(shù): 673)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

來(lái)自 2#
ID:693722 發(fā)表于 2020-3-1 17:19 | 只看該作者
為什么Proteus里面STM32F103的晶振頻率設(shè)置為40MHz,而不是8MHz,會(huì)不會(huì)設(shè)置錯(cuò)了
回復(fù)

使用道具 舉報(bào)

來(lái)自 3#
ID:522338 發(fā)表于 2020-3-10 15:23 | 只看該作者
大佬,為什么我用您的hex文件和仿真 必須把COMPIN的波特率設(shè)置為57600,MCU的晶振48MHZ才能正確輸出啊,但是看代碼里寫(xiě)的usart的初始化不是4800嗎,而且PLL倍數(shù)那個(gè)選擇的是5倍,不應(yīng)該是40MHZ嗎
回復(fù)

使用道具 舉報(bào)

來(lái)自 4#
ID:711649 發(fā)表于 2020-4-17 11:01 | 只看該作者
樓主,方便把源碼發(fā)一下嘛,我按照你的程序創(chuàng)建工程運(yùn)行之后顯示不正確,直接用你的HEX文件能仿真出來(lái),想看一下你是怎么配置的,謝謝��!
回復(fù)

使用道具 舉報(bào)

5#
ID:233711 發(fā)表于 2019-11-9 11:37 | 只看該作者
內(nèi)容很新 很實(shí)用
回復(fù)

使用道具 舉報(bào)

6#
ID:253856 發(fā)表于 2019-11-18 13:30 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

7#
ID:72576 發(fā)表于 2020-1-12 12:14 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

8#
ID:72576 發(fā)表于 2020-1-12 12:15 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

9#
ID:552592 發(fā)表于 2020-3-8 15:27 | 只看該作者
Proteus能不能仿真STM32F103C8T6
回復(fù)

使用道具 舉報(bào)

10#
ID:700459 發(fā)表于 2020-3-9 07:33 | 只看該作者
good code
回復(fù)

使用道具 舉報(bào)

11#
ID:710744 發(fā)表于 2020-3-18 18:24 | 只看該作者
想學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

12#
ID:700459 發(fā)表于 2020-3-19 07:30 | 只看該作者
thank you very much
回復(fù)

使用道具 舉報(bào)

13#
ID:292427 發(fā)表于 2020-4-11 16:37 | 只看該作者
Pee_32 發(fā)表于 2020-3-8 15:27
Proteus能不能仿真STM32F103C8T6

不能 最新版的都沒(méi)有 ,有別的STM32F103
回復(fù)

使用道具 舉報(bào)

14#
ID:400821 發(fā)表于 2020-4-15 15:11 | 只看該作者
非常好
回復(fù)

使用道具 舉報(bào)

15#
ID:594374 發(fā)表于 2020-4-20 11:13 | 只看該作者
您好方便發(fā)一下程序么   這個(gè)我程序設(shè)置波特率9600,但是在仿真中必須要設(shè)置主頻48波特率57600才能正確接收到  有點(diǎn)蒙  想看看您的程序
回復(fù)

使用道具 舉報(bào)

16#
ID:731693 發(fā)表于 2020-4-21 08:33 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

17#
ID:734107 發(fā)表于 2020-4-25 15:19 | 只看該作者
僅在主頻48MHZ,virtual的波特率設(shè)置為57600,才可以正常顯示,而且分頻數(shù)為5,6都不行。程序里的波特率,也不能寫(xiě)57600,我寫(xiě)的9600可以正常。很迷。。。
回復(fù)

使用道具 舉報(bào)

18#
ID:483144 發(fā)表于 2020-5-12 10:56 | 只看該作者
Proteus仿真串口時(shí),Proteus的晶振頻率要按SYSCLK的值設(shè)置
回復(fù)

使用道具 舉報(bào)

19#
ID:750338 發(fā)表于 2020-5-12 21:40 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

20#
ID:256070 發(fā)表于 2020-5-13 10:14 | 只看該作者
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

21#
ID:750635 發(fā)表于 2020-5-14 10:44 | 只看該作者
能發(fā)下源代碼嗎
回復(fù)

使用道具 舉報(bào)

22#
ID:451629 發(fā)表于 2020-5-14 22:26 | 只看該作者
這個(gè)。。程序。。哎
回復(fù)

使用道具 舉報(bào)

23#
ID:451629 發(fā)表于 2020-5-14 22:27 | 只看該作者
只是零散的幾個(gè)文件,還不如不發(fā)
回復(fù)

使用道具 舉報(bào)

24#
ID:748904 發(fā)表于 2020-5-18 10:35 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

25#
ID:762483 發(fā)表于 2020-5-27 14:40 | 只看該作者
這要怎么設(shè)置,暈了,剛剛設(shè)置主頻48波特率57600才能正確接收到(程序波特率為9600),現(xiàn)在又不行了
回復(fù)

使用道具 舉報(bào)

26#
ID:762483 發(fā)表于 2020-5-27 14:50 | 只看該作者
lsf18 發(fā)表于 2020-4-20 11:13
您好方便發(fā)一下程序么   這個(gè)我程序設(shè)置波特率9600,但是在仿真中必須要設(shè)置主頻48波特率57600才能正確接收 ...

你后面成功了嗎?我也是程序設(shè)置的波特率為9600 ,和你的情況一樣。但是代碼重新編譯一下就不可以使用了
回復(fù)

使用道具 舉報(bào)

27#
ID:435675 發(fā)表于 2020-6-20 14:10 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

28#
ID:810485 發(fā)表于 2020-8-2 11:11 | 只看該作者
huodongjia 發(fā)表于 2020-3-10 15:23
大佬,為什么我用您的hex文件和仿真 必須把COMPIN的波特率設(shè)置為57600,MCU的晶振48MHZ才能正確輸出啊,但 ...

我和你一樣,PROTUES設(shè)置波特率57600才行,程序里面9600,哎
回復(fù)

使用道具 舉報(bào)

29#
ID:1077229 發(fā)表于 2023-5-14 22:36 | 只看該作者
不錯(cuò),有思路了
回復(fù)

使用道具 舉報(bào)

30#
ID:147329 發(fā)表于 2023-9-3 16:10 | 只看該作者
是不是鎖相環(huán)沒(méi)有工作呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表