1. HC-05藍牙
1.1藍牙模塊使用介紹
藍牙HC05是主從一體的藍牙串口模塊,簡單的說,當藍牙設備與藍牙設備配對連接成功后,我們可以忽視藍牙內部的通信協議,直接將將藍牙當做串口用。當建立連接,兩設備共同使用一通道也就是同一個串口,一個設備發送數據到通道中,另外一個設備便可以接收通道中的數據。
1.2藍牙模塊使用注意
hc-05支持從4800bps~1382400bps間的標準波特率,使用時波特率一定要匹配,vcc接3.3 或者 5V GND 接GND TX接單片機上的RX RX接TX。
2.Stm32F1串口通信
2.1串口通信介紹
STM32F103ZET6 最多可提供 5 路串口,
2.2串口通信算法思路
串口時鐘使能,GPIO 時鐘使能
串口復位
GPIO 端口模式設置
串口參數初始化
開啟中斷并且初始化 NVIC(如果需要開啟中斷才需要這個步驟)
使能串口
編寫中斷處理函數
2.3步驟詳解
1.串口時鐘使能,使用哪個串口查手冊使能哪個時鐘,還有IO口時鐘使能
2.串口復位。當外設出現異常的時候可以通過復位設置,實現該外設的復位,然后重新配置 這個外設達到讓其重新工作的目的。一般在系統剛開始配置外設的時候,都會先執行復位該外設的操作。
復位的是在函數 USART_DeInit()中完成:
void USART_DeInit(USART_TypeDef* USARTx);//串口復位
復位很重要,根據情況選擇
3.GPIO 端口模式設置 。在這可能很多人不知道,在中文手冊110頁有,對應著來就行
4.串口參數初始化
波特率,字長,停止位,奇偶校驗位, 硬件數據流控制,模式(收,發)。我們可以根據需要設置這些參數,這里需要是你在串口助手或者說用別的設備通信時讓兩者保持一致就行。
5 .開啟中斷并且初始化 NVIC
這里推薦使用中斷,使用中斷好處是可以控制串口通信在代碼中的優先級。
5.1 NVIC 中斷使用
1.STM32 將中斷分為 5 個組,組 0~4。
2.0 111 0: 4 0 位搶占優先級, 4 位響應優先級
1 110 1: 3 1 位搶占優先級, 3 位響應優先級
2 101 2: 2 2 位搶占優先級, 2 位響應優先級
3 100 3: 1 3 位搶占優先級, 1 位響應優先級
4 011 4: 0 4 位搶占優先級, 0 位響應優先級
3. 數值越小所代表的優先級就越高。
4.:第一,如果兩個中斷的搶占優先級和響應優先級都是一樣的話,則看哪個中斷先發生就先執行;
第二,高優先級的搶占優先級是可以打斷正在進行的低搶占優先級中斷的。而搶占優先級相同的中斷,高優先級的響應優先級不可以打斷低響應優先級的中斷。
6.使能串口
這個沒啥說的,不使能你死活用不了。
7.開啟串口中斷
比如在接收到數據的時候(RXNE 讀數據寄存器非空),我們要產生中斷,那么我 們開啟中斷的方法是:
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟中斷,
我們在發送數據結束的時候(TC,發送完成)要產生中斷,那么方法是: USART_ITConfig(USART1,USART_IT_TC,ENABLE);
8.獲取相應中斷狀態。
當我們使能了某個中斷的時候,當該中斷發生了,就會設置狀態寄 存器中的某個標志位。
比如我們使能了串口發送完成中斷,那么當中斷發生了, 我們便可以在中斷處理函數中調用這 個函數來判斷到底是否是串口發送完成中斷,方法是:
USART_GetITStatus(USART1, USART_IT_TC)
((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) ||
((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) ||
返回值是 SET,說明是串口發送完成,中斷發生。
7.編寫中斷函數
!!!!這個很重要,一點一點慢慢講
中斷函數一般格式是
void USART1_IRQHandler(void)
使用串口一就要寫成T1,2就是T2。
發送
STM32 庫函數操作 USART_DR 寄存器發送數據的函數是:
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
通過該函數向串口寄存器 USART_DR 寫入一個數據。
讀取
STM32 庫函數操作 USART_DR 寄存器讀取串口接收到的數據的函數是:
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
通過該函數可以讀取串口接受到的數據
Res=USART_ReceiveData(USART1);//接受數據Res=對用串口發送的數據
b=Res;
USART_SendData(USART1,b);//發送數據,發送數據b
發送和讀取都要建立在判別串口狀態的基礎上
這里介紹下串口狀態
RXNE(讀數據寄存器非空),當該位被置 1 的時候,就是提示已經有數據被接收到了,并 且可以讀出來了。
TC(發送完成),當該位被置位的時候,表示 USART_DR 內的數據已經被發送完成了。
。
例如我們要判斷讀寄存器是否非空(RXNE),操作庫函數的方法是: USART_GetFlagStatus(USART1, USART_FLAG_RXNE);
我們要判斷發送是否完成(TC),
操作庫函數的方法是:
USART_GetFlagStatus(USART1, USART_FLAG_TC);
判定他們是否為零來確定串口狀態。
總結
1.參考正點原子的教程
2.講解的不好,配置有一個可用的用藍牙控制跑馬燈的基礎調試代碼
!!!!
補充
手機藍牙發送 a 模式非Hex
實際上是0x61 ‘a’
經過調試發現,有時候發送的是亂碼,把模式調成非Hex就好了
上一篇:STM32 SPI筆記(基于寄存器)
下一篇:stm32f103 串口通訊
推薦閱讀
史海拾趣
EMMICRO公司始終將產品質量視為企業的生命線。公司建立了嚴格的質量管理體系,從原材料采購到生產流程,再到成品檢驗,每一個環節都嚴格把控,確保產品的品質穩定可靠。這種對品質的執著追求贏得了客戶的信任和好評,也為公司贏得了更多的市場份額。
EMMICRO公司自創立之初,就致力于在電子微芯片領域進行技術創新。公司研發團隊不斷突破技術瓶頸,成功研發出具有高性能、低功耗的芯片產品,填補了市場的空白。通過不斷的創新和技術迭代,EMMICRO的芯片產品在市場上贏得了廣泛的認可,并逐漸樹立起品牌的知名度和影響力。
在穩固國內市場的同時,HI Microwave積極開拓國際市場,與全球多家知名企業建立了長期穩定的合作關系。公司憑借優質的產品和服務,贏得了國內外客戶的廣泛贊譽。此外,HI Microwave還積極參與國際展覽和交流活動,不斷提升品牌知名度和影響力。通過與國際同行的交流與合作,公司不斷吸收先進的管理理念和技術成果,為企業的持續發展注入了新的活力。
南晶電子(DGNJDZ)成立于2011年,起初只是一家專注于半導體分立器件研發和生產的小型企業。創始人毛姬娜憑借其敏銳的市場洞察力和技術背景,帶領團隊攻克了一個又一個技術難關,逐漸在電子行業嶄露頭角。公司初期面臨著資金短缺、技術瓶頸等重重困難,但毛姬娜和團隊憑借堅韌不拔的精神,一步步走出了困境。
在老師的壓迫下,我這個學期剛開學開始看Protel DXP,開始畫板,而且一上來就是仿照SEED的板,不過只用了RS232通信和LCD顯示部分,232部分是通了沒問題了,但LCD還沒有通,不知道是電路的問題,還是他們公司給的CPLD的問題,這個問題肯定要解決的。 ...… 查看全部問答∨ |
|
EVC 編譯TCPMP的時候,沒有的選擇ARMV4,是什么原因? EVC 編譯TCPMP的時候,沒有的選擇ARMV4,是什么原因? 是下載的是0.72RC1的TCPMP源碼,請問該如何處理?有做過的嗎?網上的編譯過程沒有說到這個問題的。 請過的DX麻煩了… 查看全部問答∨ |
|
串的操作 要求: (1)字符串采用數組存儲,建立兩個字符串String1和String2。輸出兩個字符串。 (2)將字符串String2的頭n個字符添加到String1的尾部。輸出結果。 (3)查找串String3在串String1中的位置,若String3在String1中不存在,則插入 ...… 查看全部問答∨ |
我是上海一大學軟件工程專業的09屆應屆生,本科,不是很會說話。 在學校里學的是單片機開發之類的(偏軟件 C語言),接觸過ARM+Wince之類的嵌入式軟件的開發。(其實學校里嵌入式軟件方面的課基本就沒有,都是我憑著興趣自學的)單片機的水平達到自 ...… 查看全部問答∨ |
最近想玩一下液晶取字,就想在12864液晶上,加一塊觸摸板,通過對觸摸板的觸摸,達到對液晶相應位置“字”的“取”。我想用51單片機完成,不知道方案,觸摸板看過,好像電源線、信號線都是手機里那種,很難焊。求高手,我該用什么觸摸板來做 ...… 查看全部問答∨ |
最近網友問到OSSchedLock()這個函數的問題,當時我也搞得半昏迷狀態。 這個函數又叫上鎖函數,如果在一個任務里面調用了上鎖函數,那么OSSched()這個任務切換函數就不會執行也就是說不會進任務調度。 調用OSSchedLock()以后,用戶 ...… 查看全部問答∨ |