在用proteus 仿真 stm32f103c6串口時,發(fā)現(xiàn)stm32主頻不能超過55MHz,參見proteus的 sample project,我把倍頻系數(shù)設(shè)為6,同時仿真主頻需設(shè)為倍頻系數(shù)*8M(晶振頻率),串口波特率不受限制。參見附件
proteus仿真串口前必讀事項
1、 proteus Virtual Terminal 串口波特率沒有限制(推薦9600;)
2、 但對于倍頻系數(shù) RCC_PLLMul_*,*的取值似乎只能是6以下,否則Virtual Terminal顯示亂碼。
在sys.c中設(shè)置(洋桃電子例程;野火似乎沒把設(shè)置RCC頻率程序單列出來)
/*設(shè)置PLL時鐘源及倍頻系數(shù)*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_5); //RCC_PLLMul_x(枚舉2~16)是倍頻值。當HSE=8MHZ,RCC_PLLMul_9時PLLCLK=72MHZ
3、 雙擊proteus原理圖中stm32元件,載入*.elf文件時,彈出如圖2的窗口,頻率必須設(shè)為8MHz* RCC_PLLMul_*,其中*<=6, 8MHz為stm32f103c6的外接晶振頻率(proteus仿真庫沒有stm32f103c8)。
0.png (161.69 KB, 下載次數(shù): 110)
下載附件
2019-9-18 03:32 上傳
0.png (169.45 KB, 下載次數(shù): 109)
下載附件
2019-9-18 03:33 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (12.06 KB, 下載次數(shù): 121)
下載附件
2019-9-18 03:31 上傳
單片機源程序如下:
- #include "stm32f10x.h" //STM32頭文件
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- int main (void){//主程序
- RCC_ClocksTypeDef RCC_Clocks;
- u8 a=7,b=8;
- //初始化程序
- RCC_Configuration(); //時鐘設(shè)置
-
-
- RCC_GetClocksFreq(&RCC_Clocks);
-
- USART1_Init(4800); //串口初始化(參數(shù)是波特率)
- //主循環(huán)
- while(1){
- /* 發(fā)送方法1 */
- // USART_SendData(USART1 , 0x55); //發(fā)送單個數(shù)值
- // while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); //檢查發(fā)送中斷標志位
- /* 發(fā)送方法2 */
- // printf("STM32F103 "); //純字符串發(fā)送數(shù)據(jù)到串口
- // printf("STM32 %d %d ",a,b); //純字符串和變量發(fā)送數(shù)據(jù)到串口,a符號變量
-
- /* 發(fā)送方法3 */
- USART1_printf("STM32 %d %d ",a,b);
- delay_ms(1000); //延時
- }
- }
- 【變量定義】
- u32 a; //定義32位無符號變量a
- u16 a; //定義16位無符號變量a
- u8 a; //定義8位無符號變量a
- vu32 a; //定義易變的32位無符號變量a
- vu16 a; //定義易變的 16位無符號變量a
- vu8 a; //定義易變的 8位無符號變量a
- uc32 a; //定義只讀的32位無符號變量a
- uc16 a; //定義只讀 的16位無符號變量a
- uc8 a; //定義只讀 的8位無符號變量a
- #define ONE 1 //宏定義
- delay_us(1); //延時1微秒
- delay_ms(1); //延時1毫秒
- delay_s(1); //延時1秒
- */
復制代碼
所有資料51hei提供下載:
7USART—串口通信.7z
(888.46 KB, 下載次數(shù): 673)
2019-9-18 03:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|