STM32F1的串口有好幾組,STM32的串口還有分數波特率發生器、支持同步單線通信和半雙工單線通訊、支持 LIN、 支持調制解調器操作、 智能卡協議和 IrDA SIR ENDEC 規范、具有 DMA等。
雖然有這么多功能,但是這里為了總結串口的原理,采用最簡單的查詢的方式和電腦進行通信。
其實原子哥的《STM32F1開發指南-庫函數版本》已經解釋的非常詳細了,這里只是按照我自己的風格敘述一遍而已。
使用串口的步驟
1,打開IO時鐘
2,配置串口IO口模式,具體方式查看《STM32中文參考手冊》8.1.11章節,接收引腳和發送引腳模式不一樣的,所以要分別配置。
5,打開串口時鐘
6,配置前最好復位下串口,這是個好習慣
7,配置串口,就是配置完串口初始化函數里面的選項就好了
8,使能串口
9,配置完成,下面可以正式使用了
本實驗的功能;接收從電腦發送來的數據,然后發送回去
數據接收和發送的步驟;
1,不停地查詢接收數據的狀態標志位
2,當查詢到有數據來時就接收數據放在變量中
3,發送接收到的數據,
4,等待數據發送完成,查詢數據發送完成狀態標志位
5,繼續等待接收數據
注意;本實驗只是示例,每次接收的數據長度是有限制的,本實驗只是總結下串口的原理,估計項目中不會有人這樣使用串口。
代碼如下;
#include "sys.h"
#include "delay.h"
/************************************************************
功能;接收從電腦發送來的信息,并發送回電腦
串口接在PA9,PA10
串口配置步驟
為了更好的說明串口的本質,這里采用查詢的方式,并沒有使用中斷
1,打開串口IO時鐘
2,選擇串口接收 引腳
3,選擇接收引腳模式,這個模式要看《中文手冊》8.1.11章節
4,配置IO翻轉速度
5,配置串口發送引腳,方法同串口接收引腳,但是IO模式不一樣
6,打開uart1時鐘
7,選擇串口波特率
8,選擇是否需要硬件流控制
9,打開接收和發送模式
10,選擇是否啟用奇偶校驗
11,選擇停止位個數
12,選擇數據長度
13,配置完成后一定要記得使能串口
14,不斷查詢接收狀態位,然后該干嘛就干嘛去,發送數據的時候記得等待數據發送完成
****************************************************************/
void init__uart1()
{
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
// 串口IO配置,PA9,PA10
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//IO時鐘打開
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//IO方式具體看《中文手冊》8.1.11章節
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//IO方式具體看《中文手冊》8.1.11章節
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
//配置串口1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//打開串口時鐘
USART_DeInit(USART1);//在配置串口前復位下是個好習慣
USART_InitStruct.USART_BaudRate=115200; //波特率115200
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //無硬件流
USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //接收和發送都使能
USART_InitStruct.USART_Parity=USART_Parity_No; //無奇偶校驗
USART_InitStruct.USART_StopBits=USART_StopBits_1; //停止位1位
USART_InitStruct.USART_WordLength=USART_WordLength_8b; //數據長度8位
USART_Init(USART1,&USART_InitStruct);
USART_Cmd(USART1,ENABLE); //配置完成后一定要記得使能串口
}
int main(void)
{
char re_data=0;//為了接收字符,還是定義為字符類型吧
delay_init(); //延時函數初始化
init__uart1();//串口1初始化
while(1)
{
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==1) //查詢接收數據狀態標志位
{
re_data=USART_ReceiveData(USART1); //接收數據
USART_SendData(USART1,re_data); //發送數據
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); //等待數據發送完畢
}
}
}
上一篇:STM32F1--串口通訊實驗
下一篇:STM32 串口通信識別程序
推薦閱讀
史海拾趣
面對全球能源危機和環保意識的提高,Delta公司敏銳地捕捉到了能源管理市場的巨大潛力。于是,公司開始積極拓展能源管理業務,通過系統集成與解決方案,幫助客戶提升效能、降低運營成本與資本支出。Delta的能源管理業務涵蓋了工業自動化、太陽能、風能、車用電子與通訊電源等多個領域,為全球客戶提供了全方位的能源管理解決方案。
在BERNSTEIN公司的發展過程中,家族傳承和企業管理一直是一個重要的主題。Hans-Joachim Bernstein作為Hans Bernstein的長子,在塑造公司的成功故事中發揮了重要作用。在他的管理下,“SpezialFabrik für Schaltkontakte”公司發展成為當今在國際上活躍的技術集團。這家家族企業現已進入第三代,Nicole和Achim Bernstein作為新一代領導人,繼續傳承著家族的優良傳統和企業文化,推動著公司的持續發展。
可穿戴設備市場近年來持續增長,Devar Inc公司也積極布局這一領域。公司研發了一系列具有創新性的可穿戴設備,如智能手環、智能眼鏡等。這些設備不僅具備健康監測、運動記錄等基本功能,還集成了Devar的AI技術,能夠為用戶提供更加個性化的服務。例如,智能手環可以根據用戶的運動習慣和健康數據,為用戶提供定制化的運動計劃和健康建議。
為了進一步加強在全球市場的地位,C&K在2011年進行了一次重要的收購。這次收購不僅擴大了公司的業務范圍,還提升了其設計和制造能力。通過這次收購,C&K得以在全球范圍內提供更廣泛的產品和服務,進一步鞏固了其在電子行業中的領先地位。
在成功推出高效能芯片后,艾譜科公司開始積極拓展市場。公司憑借其產品的技術優勢,與多家知名電子產品制造商建立了合作關系。同時,艾譜科還積極參加國際電子展會,向全球客戶展示其產品的卓越性能。隨著市場知名度的提高,艾譜科的訂單量逐漸增加,公司規模也不斷擴大。
僅供參考,中國人總是說話很含蓄,需要琢磨。不過在越來越多的公司里,已經逐漸直接多了。 1.普通員工(不是太聰明) 2.格外出色(目前還沒犯錯誤) 3.善于社交(能喝) 4.觀察能力強(經常打小報告) 5.工作態度熱忱(固執己見) 6.思 ...… 查看全部問答∨ |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 編輯 每個女孩心中都有一個羅曼蒂克的夢,而我的夢就是《人鬼情未了》里面帕特里克.斯維茲與黛米.摩爾纏綿動人的擁抱。 每當想起這個鏡頭,我仍然禁不住的淚濕了雙眼。沉浸在流線般美麗的制陶 ...… 查看全部問答∨ |
|
開帖專門討論ce5.0下擴展16c550的問題(在做這個的朋友大家多多發言阿) 最近在做wince5.0下擴展串口的驅動,現在想用ce5.0微軟提供的串口驅動,移植到AT9261上,即 %_WINCEROOT%\\Public\\Common\\Oak\\Drivers\\Serial\\COM16550.代碼看過了. 現在問題是: 1,我要將它改成自己的串口驅動用,看完代碼后似乎覺得只用做一 ...… 查看全部問答∨ |
pda向遠程pc傳輸文件方法(不是很大,最大幾兆)? vs2005 c# 我最近在做一個pda應用程序,用的是vs2005,C#語言。 程序中要實現pda中一個xml文件傳輸到遠程pc上。 我查閱了一些資料,有很多方法,如給予http,ftp或者是socket等,我想知道對于我 ...… 查看全部問答∨ |
Catalog 加進 Ram and Rom File system FAT File system Hive-Based Registry & ...… 查看全部問答∨ |
大家好,我遇到一個積分電路,我參閱產品手冊上面說這部分起到延緩作用,我不太懂,請大家幫忙分析一下,謝謝!直流電壓輸入(是20-160MA電流轉換過來的),那這個電路圖的輸出不就是一條斜坡電壓了么?怎么會有調節作用?輸出是 Uom,在達到Uom之前 ...… 查看全部問答∨ |