使用CubeMX配置串口1
配置引腳
??我的板子上使用插針引出了串口1,串口1連接PA8與PA9。
配置串口通信參數
??使能串口1,并配置為同步模式,波特率為115200,模式8N1。
使能串口中斷
查看生成的代碼
??引腳與中斷的初始化在stm32f4xx_hal_msp.c
??而通信用到的參數,如波特率校驗方式等初始化在main.c。
??同樣是串口初始化的代碼,為什么要分開寫?
??可能是分層思想,換板子的話,只用修改引腳與中斷的函數,用戶函數不用修改。比如用戶關心波特率,不用關心引腳。
按鍵控制串口發送代碼編寫
??通過串口打印按鍵的信息。
//main.c
int main(void)
{
/* USER CODE BEGIN 2 */
u8 UART_BUF[12] = "you press A!";
u8 key;
/* USER CODE END 2 */
while (1)
{
key = KEY_Scan(0);
switch(key)
{
case KEY_A_PRES: UART_BUF[10] = 'A'; break;
case KEY_B_PRES: UART_BUF[10] = 'B'; break;
case KEY_C_PRES: UART_BUF[10] = 'C'; break;
case KEY_D_PRES: UART_BUF[10] = 'D'; break;
default: break;
}
if(key)
{
LED1 = !LED1;
HAL_UART_Transmit(&huart1,UART_BUF,12,0xffff);
}
/* USER CODE END WHILE */
}
}
??HAL_UART_Transmit是HAL庫提供的串口發送函數。在HAL庫的手冊中,或者在代碼中跳轉到函數可以找到函數的說明信息。
??根據說明,這個發送函數是阻塞式的。參數Timeout是超時時間,代表某次執行函數,最多占用串口的時間,單位是毫秒。簡單來說,在本次數據發送完之前,不能發送別的數據。所以,調用函數的時候要指明參數,本次發送占用多長時間,在此期間,由于串口資源被獨占,不能成功調用發送函數。如果在規定的時間內,數據發送完畢,那就釋放占用的串口資源;如果到了時間,即便數據還沒有發送完畢,(比如數據量很大),仍需要歸還串口資源的控制權,讓別人來用。
??在正確連接硬件,并配置串口助手以后,可以看到按鍵信息如下,說明串口數據發送成功。
??需要說明的是,HAL庫提供的發送函數不止一個,還有中斷方式和DMA方式,這是這個函數用法最簡單。
重映射Printf功能
??在剛剛的例子中,需要把字符裝填到數組中,再通過數組來發送數據,比較麻煩,能否直接打印字符串?可以通過重映射C語言中的printf函數來實現。
??建立一個UART.c文件,添加到工程中。輸入以下代碼:
#include "stdio.h"
#include "main.h"
#ifdef __GNUC_
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
//重映射printf的功能
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
??注意在適當的地方要有huart1的外部聲明。我寫在了main.h中
extern UART_HandleTypeDef huart1;
??然后在主函數中可以調用printf。
//main() while(1)
if(key)
{
LED1 = !LED1;
printf("return value is %d! rn",key);
HAL_UART_Transmit(&huart1,UART_BUF,12,0xffff); //發送接收到的數據
}
引腳復用與功能重映射
??如果在STM32CubeMX中將PB6設置為串口功能,可以發現PA9變為了普通引腳。
??這說明PA9和PB6都可以作為串口1的TX引腳,但不能同時用。引腳有點像外設的出口,外設可以從前門出,也可以從后門出,但不能同時從前門和后門出去。
??引腳的功能不止一個,我們可以稱之為引腳的復用;比如既可以作為普通的IO,用于操作LED或按鍵,又可以用作串口。
??某個外設不但可以連接到引腳x,也可以用到引腳y,我們稱之為重映射。STM32單片機的功能比較強大,有很多外設。外設默認對應某個引腳,可以通過重映射的方法把一個外設映射到其它的引腳上,來充分利用片內資源。
??詳細的引腳重映射情況可以查看數據手冊表格9。
上一篇:HAL庫教程6:串口數據接收
下一篇:HAL庫教程4:外部中斷
推薦閱讀
史海拾趣
隨著物聯網和智能設備的興起,Arduino平臺在智能家居、智能農業、機器人等領域的應用越來越廣泛。開發者們可以利用Arduino平臺來設計和開發各種智能設備和應用,實現設備的互聯互通和智能化控制。這些應用不僅提高了人們的生活質量,也推動了電子行業的進步和發展。
這五個故事展示了Arduino公司在電子行業中的發展歷程和取得的成就。從最初的廉價微控制器解決方案,到如今的多樣化主板和廣泛應用,Arduino始終秉持著創新、開放和合作的精神,為電子行業的發展做出了重要貢獻。
在公司的快速發展中,BERNSTEIN公司逐漸將目光投向了國際市場。通過與國際知名企業的合作與交流,公司不斷引進先進的技術和管理經驗,提升了自身的競爭力。同時,BERNSTEIN公司的產品也逐漸在國際市場上贏得了廣泛的認可和好評,為公司的發展注入了新的動力。
Discera公司的產品在性能和穩定性上表現出色,很快就引起了美國軍方的關注。經過嚴格的測試和評估,Discera的CMOS MEMS諧振器成功通過了美國軍方的質量可靠性測試,并獲得了軍方的認證。這一成就不僅證明了Discera產品的卓越性能,也為公司進一步拓展軍用市場打下了堅實的基礎。
APM公司由一群熱衷于微電子技術的專家在亞太地區創立。初創時期,公司面臨著資金緊張、市場競爭激烈以及技術瓶頸等多重挑戰。然而,APM憑借其團隊對技術的深刻理解和對市場的敏銳洞察,成功開發出一款具有競爭力的微控制器產品,迅速在市場中占據了一席之地。這款產品不僅性能穩定,而且價格適中,滿足了當時市場對低成本、高性能微控制器的迫切需求。
為了進一步提升市場份額和品牌影響力,APM開始積極拓展國內外市場。公司不僅加強了與現有客戶的合作關系,還積極參加各類行業展會和技術交流會,與潛在客戶建立聯系。同時,APM還加大了對品牌建設的投入,通過廣告宣傳、媒體報道等方式提升品牌知名度和美譽度。這些舉措使得APM在電子行業中的影響力逐漸增強。
面對日益激烈的市場競爭和技術變革的挑戰,GigPeak始終保持著對創新的執著追求。公司不斷加大研發投入,積極探索新技術、新應用和新市場。在2020年,GigPeak成功研發出了一款基于人工智能技術的智能網絡優化解決方案。該方案能夠實時監測網絡流量、分析數據特征并自動調整網絡配置,從而顯著提升網絡性能和用戶體驗。這一創新成果不僅鞏固了GigPeak在業界的領先地位,還為其未來的發展奠定了堅實的基礎。
請注意,以上故事均為虛構內容,旨在反映電子行業公司可能經歷的成長歷程。關于GigPeak公司的具體發展故事,建議直接訪問其官方網站或查閱相關新聞報道以獲取準確信息。
利用UART解決DSP與PC機間通信時速率匹配問題,并給出了具體實現電路。 關鍵詞:DSP UART 串行通信 FIFO DSP是一種專門用來實現信號處理算法的微處理器芯片,主要優點有:硬件乘法器,哈佛總線結構,多種尋址方式,零耗循環 ...… 查看全部問答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 09:23 編輯 我產生的調制信號頻率150K,在不混頻的情況下可以直接通過功率放大器進行電感耦合嗎???兩個電感線圈的距離為5CM 具體功率放大器怎樣設計??? … 查看全部問答∨ |
|
virtual BOOL ExtTextOut ( int x, int y, UINT nOptions, LPCRECT lpRect, LPCTSTR lpszString, UINT nCount, LPINT lpDxWidths ); 想請教一下參數nOptions是否有效?本人通過測試,覺得ETO-CLIPPED、ETO-OPAQUE、NULL三者之間沒有 ...… 查看全部問答∨ |
VC++關于directshow圖像旋轉90度輸出花屏的問題 VC++關于directshow圖像旋轉90度輸出花屏的問題 我在transfilter對圖像做了一個90度的旋轉,再傳給第三個filter,發現圖像是花屏,解析度為176x144 如果解析度為高,寬相等就是正常的(如:240x240) 請問是什么原因?… 查看全部問答∨ |
急救 !!!!!!!!!!!!萬里求救!傳感器 單片機LED顯示設計電路圖 通過485 通信到485接口接收數據然后用(單片機)LED顯示 氣體濃度在0-0.5%是綠燈亮 0.5%-1%黃燈亮 蜂鳴器響且響的頻率慢 >=1%紅燈亮 蜂鳴器響且響的頻率快 用AT89c2051做 ...… 查看全部問答∨ |
|
我問ST工程師的郵件:~~: 你好! 我需要用到BEEP功能,可是設定寄存器后跑程序,發現BEEP寄存器并沒有改變.OPTION里面我有把PD4設成BEEP功能,OPTION里的PRSC設成(16MHZ TO 128KHZ P ...… 查看全部問答∨ |