1、串口的配置
1)首先打開你的工程,在STM32Cube里面找到USART1,此時串口默認(rèn)是Disanle的,我們要使能它,選擇Asynchronous.
2)然后點(diǎn)擊Configuration,就會有一個串口的配置圖框,點(diǎn)進(jìn)去配置串口,如果需要用到中斷,選擇NVIC進(jìn)去進(jìn)行相關(guān)配置。
串口配置:
串口中斷使能:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
2、查看串口內(nèi)的函數(shù)API
Keil工程內(nèi)選擇{ }Functions,然后選擇你需要查看的目標(biāo)源文件,展開既是該源碼內(nèi)的函數(shù)
串口的發(fā)送接收函數(shù):
HAL_UART_Transmit();//串口輪詢模式發(fā)送,使用超時管理機(jī)制
HAL_UART_Receive();//串口輪詢模式接收,使用超時管理機(jī)制
HAL_UART_Transmit_IT();//串口中斷模式發(fā)送
HAL_UART_Receive_IT();//串口中斷模式接收
HAL_UART_Transmit_DMA();//串口DMA模式發(fā)送
HAL_UART_Receive_DMA();//串口DMA模式接收
串口相關(guān)的中斷函數(shù):
HAL_UART_TxHalfCpltCallback()://一半數(shù)據(jù)(half transfer)發(fā)送完成后,通過中斷處理函數(shù)調(diào)用。
HAL_UART_TxCpltCallback()://發(fā)送完成后,通過中斷處理函數(shù)調(diào)用。
HAL_UART_RxHalfCpltCallback()://一半數(shù)據(jù)(half transfer)接收完成后,通過中斷處理函數(shù)調(diào)用。
HAL_UART_RxCpltCallback():///接收完成后,通過中斷處理函數(shù)調(diào)用。
HAL_UART_ErrorCallback():/傳輸過程中出現(xiàn)錯誤時,通過中斷處理函數(shù)調(diào)用。
串口有三種通信模式:
第一種是輪詢的模式。CPU不斷查詢IO設(shè)備,如設(shè)備有請求則加以處理。例如CPU不斷查詢串口是否傳輸完成,如傳輸超過則返回超時錯誤。輪詢方式會占用CPU處理時間,效率較低。
第二種就是中斷控制方式。當(dāng)I/O操作完成時,輸入輸出設(shè)備控制器通過中斷請求線向處理器發(fā)出中斷信號,處理器收到中斷信號之后,轉(zhuǎn)到中斷處理程序,對數(shù)據(jù)傳送工作進(jìn)行相應(yīng)的處理。
第三種就是直接內(nèi)存存取技術(shù)(DMA)方式。所謂直接傳送,即在內(nèi)存與IO設(shè)備間傳送一個數(shù)據(jù)塊的過程中,不需要CPU的任何中間干涉,只需要CPU在過程開始時向設(shè)備發(fā)出“傳送塊數(shù)據(jù)”的命令,然后通過中斷來得知過程是否結(jié)束和下次操作是否準(zhǔn)備就緒。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
3、在main.c文件添加printf支持
/* USER CODE BEGIN 1 */
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 1 */
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
4、單獨(dú)串口中斷的使用
1)在main函數(shù)前面添加兩個數(shù)組變量
uint8_t aTxStartMessage[] = "rn UART-communication based on IT rn";
uint8_t aRxBuffer[20];
/* USER CODE END PV */
2)在main函數(shù)中添加語句接收數(shù)據(jù)10個字符,保存在數(shù)組aRxBuffer中。
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 10);//串口接收中斷使能,如果要循環(huán)使用就放到while(1)里面
3)在main.c文件添加中斷接收完成回調(diào)函數(shù)。中斷回調(diào)函數(shù)中將接收到的數(shù)據(jù)又通過串口發(fā)送回去。
/* USER CODE BEGIN 4 */
/**
* @brief Rx Transfer completed callbacks
* @param huart: uart handle
* @retval None
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE : This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback can be implemented in the user file
*/
HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 10,0xFFFF);//發(fā)送10個數(shù)據(jù)給串口1
HAL_UART_Receive_IT(&huart1,aRxBuffer,10); // 重新使能串口1接收中斷
}
/* USER CODE END 4 */
----------------------------------------------------------------------------------------------------------------
5、多個串口同時使用
1)定義串口1和串口3的接收數(shù)據(jù)變量
2)中斷回調(diào)函數(shù)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE : This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback can be implemented in the user file
*/
if(huart->Instance == USART1)//串口1做調(diào)試
{
// HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer1, 10,0xFFFF);
RECV_FLAG1 = 1;
HAL_UART_Receive_IT(&huart1,aRxBuffer1,10); // 再次串口接收中斷使能
}
else if(huart->Instance == USART2)//串口2接藍(lán)牙
{
HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer2, 3,0xFFFF);
RECV_FLAG2 = 1;
HAL_UART_Receive_IT(&huart2,aRxBuffer2,3); //再次串口接收中斷使能
}
}
3)主函數(shù)編寫
Int mai(void)
{
While(1)
{
if(RECV_FLAG2 == 1)
{
RECV_FLAG2= 0;
Car_contrl(aRxBuffer2[0]); //控制協(xié)議cmd[3]:cmd[0]=控制碼 cmd[1]=0xD cmd[2]= 0xA
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer1, 10); //串口1接收中斷使能
HAL_UART_Receive_IT(&huart2, (uint8_t *)aRxBuffer2, 3); //串口3接收中斷使能,所以大小為3:0D 0A 01
}
}
-----------------------------------------------------------------------END--------------------------------------------------------------------------
---------------------
上一篇:UCOSIII在STM32F4xx上的移植
下一篇:stm32cube學(xué)習(xí)筆記(2)
推薦閱讀
史海拾趣
近年來,隨著物聯(lián)網(wǎng)和人工智能技術(shù)的快速發(fā)展,智能化物流成為了電子行業(yè)的新趨勢。Bomar公司敏銳地捕捉到了這一市場機(jī)遇,開始將業(yè)務(wù)范圍拓展至智能化物流領(lǐng)域。通過與深蘭科技等公司的合作,Bomar公司成功推出了智能化物流、倉儲裝備以及清潔機(jī)器人等產(chǎn)品,并成功銷往歐洲市場。這些產(chǎn)品的推出不僅提升了Bomar公司的市場競爭力,也為公司的未來發(fā)展開辟了新的增長點(diǎn)。
為了進(jìn)一步提升公司實(shí)力,APX Technologies開始拓展海外市場。公司在多個國家和地區(qū)設(shè)立了分支機(jī)構(gòu),并積極招聘當(dāng)?shù)氐膬?yōu)秀人才。通過不斷的努力,APX Technologies的產(chǎn)品逐漸在國際市場上占據(jù)了一席之地,公司的規(guī)模和影響力也不斷擴(kuò)大。
在追求經(jīng)濟(jì)效益的同時,COMPEX公司也積極履行社會責(zé)任,注重可持續(xù)發(fā)展。公司致力于減少生產(chǎn)過程中的環(huán)境污染,采用環(huán)保材料和工藝,推動綠色生產(chǎn)。此外,公司還積極參與社會公益事業(yè),為社會的發(fā)展貢獻(xiàn)自己的力量。這種對社會責(zé)任的擔(dān)當(dāng)和可持續(xù)發(fā)展的理念,使得COMPEX在行業(yè)中樹立了良好的形象。
請注意,這些故事是基于COMPEX公司可能的發(fā)展背景和電子行業(yè)的一般趨勢編寫的,并不代表COMPEX公司的實(shí)際發(fā)展歷程。如需了解更多關(guān)于COMPEX公司的具體故事和事實(shí),建議查閱公司官方資料或相關(guān)新聞報道。
為了進(jìn)一步拓展市場份額,達(dá)方電子開始在全球范圍內(nèi)布局生產(chǎn)基地和研發(fā)中心。同時,公司加強(qiáng)了對供應(yīng)鏈的管理,確保原材料的穩(wěn)定供應(yīng)和產(chǎn)品質(zhì)量的持續(xù)提升。這一階段的努力,使達(dá)方電子在全球電子行業(yè)中的地位得到了進(jìn)一步提升。
在電子行業(yè)的發(fā)展過程中,Cogent_Computer_Systems公司深知合作共贏的重要性。公司積極與上下游企業(yè)建立緊密的合作關(guān)系,共同推動產(chǎn)業(yè)升級。通過與供應(yīng)商的深度合作,公司確保了原材料的穩(wěn)定供應(yīng)和質(zhì)量保障;同時,與客戶的緊密溝通也幫助公司更好地把握市場需求,推出更符合消費(fèi)者期望的產(chǎn)品。這種合作共贏的模式不僅提升了公司的競爭力,也為整個電子行業(yè)的發(fā)展注入了新的活力。
EUtech Scientific Engineering公司起初以測量技術(shù)為核心,專注于為能源和電力系統(tǒng)提供高精度測量設(shè)備。隨著技術(shù)的不斷發(fā)展和市場需求的變化,公司意識到控制技術(shù)在電力系統(tǒng)中的重要性。于是,公司投入大量研發(fā)資源,成功將測量與控制技術(shù)相結(jié)合,開發(fā)出具有自主知識產(chǎn)權(quán)的控制系統(tǒng),實(shí)現(xiàn)了從測量到控制的跨越。
CMM與CAM一體化技術(shù)在汽車車身設(shè)計中的應(yīng)用 汽車產(chǎn)業(yè)是我國重點(diǎn)支柱產(chǎn)業(yè),但目前國內(nèi)各汽車生產(chǎn)廠的車身造型設(shè)計基本還停留在傳統(tǒng)手工制作上,不僅制作精度低,耗費(fèi)大量的人力和工時,也制約了汽車工業(yè)自主開發(fā)的進(jìn)程,所以在汽車設(shè)計模型制作過程中將三維數(shù)學(xué)主模型直接編程加工并通過數(shù)字照 ...… 查看全部問答∨ |
“安防靠狗”的說法深有體會,家里那邊村子里,基本人人都有條狗,動不動就是藏獒、動不動就是黑背,搞得鄰里關(guān)系整得日益疏遠(yuǎn),誰也不想給狗當(dāng)午餐不是? 但不可否認(rèn)的是,農(nóng)村安防確實(shí)是一個非常大的市場,但是如果沒有國家實(shí)質(zhì)性投入的話,這 ...… 查看全部問答∨ |
error C2061: syntax error : identifier 'SHFILEINFOW' C:\\Program Files\\Windows CE Tools\\wce600\\ProgWinCE_SDK\\Include\\Armv4i\\shellapi.h(321) : error C2061: syntax error : identifier \'SHFILEINFOW\' 1>D:\\Program Files\\Microsoft Visual Studio 8\\VC\\atlmfc\\include\\afxv_w32.h ...… 查看全部問答∨ |
|
小弟最近開始學(xué)習(xí)Ardence RTX,有很多不懂得地方,下面是一個基于serialAPI.h開發(fā)驅(qū)動的RTX通信串口測試程序。主線程是讀數(shù)據(jù),次線程是寫數(shù)據(jù)。經(jīng)過兩次測試: 1.在單臺計算機(jī)上用串口線連接COM1和COM2,并在RTX環(huán)境下將其打開,將下面次線程中寫 ...… 查看全部問答∨ |
請問各位大蝦,有熟悉lwip的嗎? 問個在inet.c文件中有個inet_chksum_pseudo()的函數(shù)相關(guān)問題。 函數(shù)原型如下: /* inet_chksum_pseudo: * * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. */ u16_t inet_chksum_pseudo(struct pbuf *p, struct ip_addr *src, struct i ...… 查看全部問答∨ |
比如占空比為20%,pwm輸出管腳不能使用定時器,所以我用中斷定時時間來實(shí)現(xiàn)輸出,定時時間到置管腳高電平或者低電平,現(xiàn)在我想問的是:我的pwm的周期怎么定呢 … 查看全部問答∨ |
我的筆記本上本身帶有并口,并且安裝了打印程序,可以執(zhí)行打印任務(wù)。為了燒寫WINCE,我安裝了GIVEIO,安裝沒有抱錯,在設(shè)備管理器里 可以看到:端口(COM和LPT)->ECP打印機(jī)(LPT1),giveio(COM6). 應(yīng)該說,不會出現(xiàn)問題,可是當(dāng)我燒寫的時候,出現(xiàn)錯 ...… 查看全部問答∨ |
在Microsoft Visual Studio 2005下編譯的程序怎么不能在WINCE4.2下運(yùn)行? 在WINCE5下都可以正常運(yùn)行,到WINCE4.2下就提示不是有效的WINDOW CE應(yīng)用程序了,有什么辦法可以解決???… 查看全部問答∨ |
@interrupt void TB_INIT(void){ PADR=0; return;}void main(void){ PADDR=0x0F; PAOR=0x0F; LTCSR=0x ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- ROHM推出“PFC+反激控制參考設(shè)計”,助力實(shí)現(xiàn)更小巧的電源設(shè)計!
- 實(shí)現(xiàn)自我溝通和與世界溝通的新方式
- 上汽集團(tuán)將推10萬級半固態(tài)電池車型
- Bourns 推出其最小封裝尺寸 AEC-Q200 認(rèn)證車規(guī)級厚膜電阻
- 特斯拉大量使用激光雷達(dá)!
- 為何只有特斯拉采用PC芯片,而其他車企采用手機(jī)級車規(guī)芯片?
- 孚能科技:全固態(tài)電池進(jìn)入中試生產(chǎn)階段,計劃年底建成 0.2GWh 中試線
- 三星顯示獲梅賽德斯-邁巴赫S級48英寸OLED屏幕訂單
- Clearmotion全主動懸掛系統(tǒng)將搭載保時捷,蔚來ET9已應(yīng)用
- R-SARC上車國產(chǎn)車型 京西智行讓智能底盤科技平權(quán)
- 中秋芯幣兌換月餅啦!
- MPS電機(jī)研究院 讓電機(jī)更聽話的秘密! 第二站:電機(jī)設(shè)計經(jīng)驗(yàn)征集令!
- 瑞薩電子RL78/G14 demo板低價開團(tuán) 19.9元包郵
- 大聯(lián)大世平集團(tuán)有獎直播:最新功能安全牽引逆變器方案:助力汽車提升續(xù)航與節(jié)省成本!預(yù)約有禮
- 得捷第二季Follow me第2期來襲,一起解鎖功能強(qiáng)大且靈活的【Arduino UNO R4 WiFi】
- 恩智浦LPC54100迅猛來襲,關(guān)注有禮
- 走進(jìn)TE物聯(lián)網(wǎng)應(yīng)用資料中心,免費(fèi)下載行業(yè)趨勢報告、技術(shù)干貨,還有樣品申請
- 鴻蒙并不是給手機(jī)設(shè)計的 外媒:華為無意開發(fā)安卓替代品
- iQOO登陸的前兆?傳言印度將要停產(chǎn)vivo V15系列
- 舜宇光學(xué)王文杰: 5G會給用戶帶來變化,看好集成光學(xué)
- 阿里云丁險峰:5G時代人和世界交互方式更加多樣
- 國家電網(wǎng)首個聯(lián)網(wǎng)運(yùn)營多站融合變電站投運(yùn)
- 慕尼黑工業(yè)大學(xué)研發(fā)一納米大小鉑顆粒 比目前燃料電池催化劑性能高一倍
- 現(xiàn)代為混合動力車研全球首個換擋主動控制技術(shù) 提升燃油經(jīng)濟(jì)性
- 英偉達(dá)利用深度神經(jīng)網(wǎng)絡(luò) 精確探測車輛與其他物體間距離
- 寶馬集團(tuán)布局5G時代 加快自動駕駛在華落地
- 三星和LG的情況截然不同:未來該如何自救?
- 如果你想?yún)⑴cDIY,但又沒思路,看過來?。。?/span>
- wince5.0中,GetServiceHandle函數(shù)的使用問題
- 華為高速數(shù)字電路設(shè)計教材
- 請問下24bit的lvds發(fā)送芯片用于點(diǎn)亮18bit的LCD屏
- MC34063 輸出電壓對稱性
- 從零開始學(xué)電路仿真Multisim與電路設(shè)計Protel技術(shù)
- 多功能隨身電源設(shè)計
- ad10繪制多層板時,
- LED電子顯示屏驅(qū)動芯片問題
- EVC4.0+sp3+ppc2003,在同事機(jī)器上都正常,裝到我機(jī)器上單步調(diào)試變得超級慢