今天分析stm32乙個相當重要的外設——串列埠,在我使用的這款微控制器中有三個串列埠分別為usart1,usart2,usart3。其中usart1掛載在匯流排apb2上,usart2,3掛載在apb1上。這是什麼意思呢!apb2可以看做是高速公路,傳輸速度很快。apb1可以看做是省道,傳輸速度會慢很多。這次以usart1為例,若要使用usart2,3只需要在時鐘配置,以及埠配置的地方修改為相應的串列埠即可。
今天完成重定向,在主程式中使用printf()函式。重定向可以理解為在程式中重寫相應的函式,使得在呼叫相關庫函式時,不去呼叫庫函式,而是呼叫你所重寫的函式。
開發串列埠,主要分為以下幾個步驟:
配置相關的時鐘和埠
配置串列埠的相關的結構體
使能串列埠外設
完成配置在主函式收發資料
直接上**了:
void usart_config(void)
int fputc(int ch,file* f)
這段**中有兩個函式,分別為usart_config()和fputc()。其中usart_config()函式為串列埠相關的配置函式。在這個函式中首先開啟串列埠和gpio的時鐘,極為重要。並且在usart2,3中匯流排是apb1。接下來實復用gpio的配置,在rx埠使用浮空輸入。在tx埠使用推挽輸出。接下來配置串列埠的結構體,比如字長,波特率等;這個在**很容易看出來一把情況下,按照**中的那樣配置就行。配置完成後記得使能外設,usart_cmd(usart1,enable);
函式fputc()即為重定向的函式,在標準庫中已經存在這個函式,在我們的**中重新書寫該函式,在函式體中實現我們想要實現的功能。切記該函式的返回型別,函式名,函式的形參要和庫函式中的完全一致,這樣才能在呼叫時呼叫自己書寫的函式,否則仍舊呼叫庫函式中的原本函式。接下來看看函式內部的東西。利用usart_senddata()函式通過串列埠傳送資料。傳送後判斷是否傳送成功,通過檢視標誌位。usart_getflagstatus()函式獲得usart_flag_tc的狀態,若為set,則傳送成功,等待傳送。
很多人看到**就開始罵娘了,為啥沒有標頭檔案!我就遇到過好多次,對於初學者,都不知道在哪個標頭檔案中。下面是配置的標頭檔案
#ifndef __usart_h
#define __usart_h
#include"stdio.h"
#include"stm32f10x.h"
#include"stm32f10x_rcc.h"
#include"stm32f10x_gpio.h"
#include"stm32f10x_usart.h"
void usart_config(void);
#endif
主函式的**如下:
#include"usart.h"
int main()
至此,串列埠結束。 STM32 摸石頭過河系列(一)
在學習stm32之前,我較為熟練的掌握了51微控制器的開發,可以運用51中的輸入 輸出,以及定時器 中斷等。今天第一天,學習stm32點亮led燈。在本次學習中使用的是stm32f103rc系列微控制器,開發工具使用的是keil5,所使用的開發板原理圖如下 在以後相當一段時間,我都將使用該開發板。天...
STM32入門系列 STM32最小系統介紹
stm32最小系統組成 stm32微控制器最小系統,也就是能夠使得微控制器正常執行程式,最少需要連線哪些器件。一般來說,stm32最小系統由四部分組成 stm32微控制器由armcortexm3 匯流排矩陣 外設組成。微控制器開發板能夠做哪些事情是自己的選擇。我們可以製作一款stm32最小系統核心開...
STM32系列命名規則
stm32系列命名規則 stm32 f 103 c 6 t 7 1 2 3 4 5 6 7 8 第1部分 產品系列名,固定為stm32 第2部分 產品型別 f表示這是flash產品,目前沒有其它選項 第3部分 產品子系列 103表示增強型產品,101表示基本型產品 105表示整合乙個全速usb 2....