UART共有三種操作方式,輪詢方式、中斷方式以及DMA方式。
應用管腳:
輸出:PA0、PA1
配置界面
添加中斷配置
添加DMA配置
代碼應用
1.實現printf函數
/* USER CODE BEGIN 0 */
#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__ */
/* USER CODE END 0 */
/* USER CODE BEGIN 4 */
/**
* @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 USART1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 4 */
2.輪詢方式發(fā)送與接收
發(fā)送數據
uint8_t senddata[20]="This use Transmit.rn";if(HAL_UART_Transmit(&huart1,senddata,sizeof(senddata),0xFFFF) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
輪詢接收采用阻塞式超時接收模式
uint8_t huart1_RxBuffer[20];
HAL_UART_Receive(&huart1, huart1_RxBuffer, 20,0x10);
3.中斷方式發(fā)送與接收
增加接收中斷回調函數
/* USER CODE BEGIN 4 */
/**
* @brief Rx Transfer completed callbacks.
* @param huart: Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART module.
* @retval None
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart==&huart1)
{
Rx_flag=1;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,(GPIO_PinState)!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0));
// if(HAL_UART_Receive_IT(&huart1, (uint8_t *)huart1_RxBuffer, Rx_size) != HAL_OK)
// {
// /* Transfer error in reception process */
// Error_Handler();
// }
}
}
/* USER CODE END 4 */
發(fā)送數據
uint8_t senddata_IT[23]="This use Transmit IT.rn";
if(HAL_UART_Transmit_IT(&huart1,senddata_IT, sizeof(senddata_IT)) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
接收數據,調用此函數后,接收中斷可執(zhí)行一次。
uint8_t huart1_RxBuffer[20];if(HAL_UART_Transmit_DMA(&huart1,senddata_DMA, sizeof(senddata_DMA))!= HAL_OK)
{
Error_Handler();
}
if(HAL_UART_Receive_IT(&huart1, (uint8_t *)huart1_RxBuffer, Rx_size) != HAL_OK) {/* Transfer error in reception process */ Error_Handler(); }
3.DMA方式發(fā)送與接收
增加接收中斷回調函數(與中斷方式相同)
發(fā)送數據
uint8_t senddata_DMA[24]="This use Transmit DMA.rn";
if(HAL_UART_Receive_DMA(&huart1, (uint8_t *)huart1_RxBuffer, Rx_size) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
接收數據(特征與中斷方式相同)
if(HAL_UART_Receive_DMA(&huart1, (uint8_t *)huart1_RxBuffer, Rx_size) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
上一篇:基于STM32的HAL庫學習(2)UART串口學習
下一篇:最后一頁
推薦閱讀
史海拾趣
2000年3月,成都華微科技誕生。當時,集成電路設計行業(yè)剛剛起步,市場競爭激烈。然而,公司憑借對中國電子信息產業(yè)集團的堅定信任,以及對中國集成電路設計市場的深刻洞察,毅然決然地踏上了這條充滿挑戰(zhàn)的道路。初創(chuàng)期的華微科技,雖然規(guī)模較小,但團隊成員都懷揣著對技術的熱情和對未來的憧憬,為公司的長遠發(fā)展奠定了堅實的基礎。
背景:隨著科技的進步,霍尼韋爾開始將目光投向更廣闊的領域,其中航空航天成為重要的發(fā)展方向。
發(fā)展:霍尼韋爾在航空航天領域取得了多項技術突破,其儀器儀表和控制系統(tǒng)在多個重要項目中發(fā)揮了關鍵作用。其中,最著名的莫過于1969年阿波羅11號登月任務中,霍尼韋爾的儀器儀表為宇航員提供了穩(wěn)定的控制和導航支持。
關鍵事件:阿波羅11號任務的成功不僅展示了霍尼韋爾在航空航天領域的實力,也進一步提升了公司的國際聲譽和市場地位。
人才是企業(yè)發(fā)展的重要保障。Fenghua (HK) Electronics Ltd高度重視人才隊伍建設,通過校園招聘、社會招聘等多種渠道吸引優(yōu)秀人才加入公司。公司提供了完善的培訓體系和晉升機會,激發(fā)了員工的積極性和創(chuàng)造力。同時,公司注重營造良好的企業(yè)文化氛圍,讓員工在工作中感受到歸屬感和成就感。
作為一家有社會責任感的企業(yè),Fenghua (HK) Electronics Ltd積極履行社會責任,關注環(huán)保和公益事業(yè)。公司采用了環(huán)保材料和節(jié)能技術,降低了生產過程中的能耗和排放。同時,公司積極參與社會公益活動,為當地社區(qū)和教育事業(yè)做出了積極貢獻。這些舉措不僅提升了公司的社會形象,也為企業(yè)的可持續(xù)發(fā)展奠定了堅實基礎。
請注意,以上故事框架僅供參考,你可以根據Fenghua (HK) Electronics Ltd公司的實際情況和發(fā)展歷程進行進一步的拓展和完善。
Ferroperm公司非常重視產品的品質管理。他們建立了嚴格的質量管理體系,從原材料采購到產品生產、檢測等各個環(huán)節(jié)都實行嚴格的質量控制。同時,Ferroperm還注重持續(xù)改進,不斷引進先進的生產設備和檢測技術,提高產品的質量和性能。這種對品質的執(zhí)著追求使得Ferroperm的產品在市場上獲得了良好的口碑和信譽。
為了進一步擴大市場份額,FDI公司開始實施全球化戰(zhàn)略。公司先后在歐美、亞洲等地設立了分支機構,并與當地企業(yè)建立了緊密的合作關系。同時,FDI還積極參與國際電子展會和論壇,與全球各地的行業(yè)精英交流學習。這些舉措不僅提升了FDI的品牌影響力,也為其帶來了更多的商業(yè)機會。
本帖最后由 paulhyde 于 2014-9-15 09:38 編輯 一、第一階段(3月至6月) 1、2月底召開2009年全國大學生電子設計競賽啟動工作會議,并由全國競賽組委會發(fā)出《關于組織2009年全國大學生電子設計競賽的通知》。 2、3月中旬各賽區(qū)按《關于組織2009 ...… 查看全部問答∨ |
|
Printenv 打印環(huán)境變量。 Uboot> printenv baudrate=115200 ipaddr=192.168.1.1 ethaddr=12:34:56:78:9A:BC serverip=192.168.1.5 Environment size: 80/8188 bytes Setenv 配置新的變量 Uboot> setenv myboard AT91RM9200DK Uboot> printenv baudr ...… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 08:57 編輯 忙了兩個多月,比賽四天三夜里只睡了10個小時,一天基本上就吃一個漢堡。雖然說比賽過去了,遺憾,惋惜沒什么意義,但失敗了,總要總結下經驗教訓。 我們做的是B題,控制類的??刂祁愐郧暗念}目都是 ...… 查看全部問答∨ |
閑來沒事,寫了個測試STM32存儲結構的程序,如下:void OSWriteUsart(u8 UsartNum,u8 *Buf,,u16 Len);具體代碼就不寫了,就是將Buf里的字節(jié)通過串口發(fā)送Len個. u32 tmp; &n ...… 查看全部問答∨ |
|
招FPGA/ASIC硬件高級工程師 硬件設計高級工程師 嵌入式高級工程師 國內領先的音視頻圖像技術廠商,以產品自主設計研發(fā)為主的生產型企業(yè),在全國設有華北、華東、華南、西南、西北、東北6大分支。 我們現在繼續(xù)多個崗位人才,尤其FPGA/ASIC硬件工程師,硬件設計工程師(熟悉Capture),嵌入式工程師(熟悉linux內核 ...… 查看全部問答∨ |
向各位大神求助了,我在用msp430串口連接GSM模塊(TC35)的時候產生了重大問題。請聽我細細道來。 我寫了一個小程序,發(fā)送一個GSM的命令,然后GSM收到的話回返回數據的。可是GSM不返回。一開始我以為是電平問題,接了一塊74ls244,再送給GSM。我確 ...… 查看全部問答∨ |