1. 程式人生 > >STM32HAL庫中斷模式串列埠初始化收發資料

STM32HAL庫中斷模式串列埠初始化收發資料

hal庫裡面路徑:STM32Cube_FW_L0_V1.10.0\Projects\STM32L053C8-Discovery\Examples \UART\UART_TwoBoards_ComIT

工程是串列埠1中斷收發模式配置

UART_HandleTypeDef UartHandle;        //串列埠結構體變數

   UartHandle.Instance        = USARTx;   //初始化串列埠例項 USART1

   UartHandle.Init.BaudRate   = 9600;     //設定波特率

   UartHandle.Init.WordLength = UART_WORDLENGTH_8B; //8位資料位

   UartHandle.Init.StopBits   = UART_STOPBITS_1;   //一個停止位

   UartHandle.Init.Parity     = UART_PARITY_NONE; //奇偶校驗位無

   UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE; //硬體控制流無

   UartHandle.Init.Mode       = UART_MODE_TX_RX;    //RX和TX模式

   if(HAL_UART_Init(&UartHandle) != HAL_OK)        //使能結構體變數 

   {

     Error_Handler();

   }

void HAL_UART_MspInit(UART_HandleTypeDef *huart)  //自己寫的函式,對串列埠引腳初始化 在 HAL_UART_Init函式裡面自動呼叫 不用宣告,

{

   GPIO_InitTypeDef  GPIO_InitStruct;

   USARTx_TX_GPIO_CLK_ENABLE();   //串列埠引腳時鐘使能

   USARTx_RX_GPIO_CLK_ENABLE();

   USARTx_CLK_ENABLE();               //串列埠時鐘使能

   /* UART TX GPIO pin configuration  */

   GPIO_InitStruct.Pin       = USARTx_TX_PIN;

   GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;

   GPIO_InitStruct.Pull      = GPIO_NOPULL;

   GPIO_InitStruct.Speed    = GPIO_SPEED_FREQ_HIGH  ;

   GPIO_InitStruct.Alternate = USARTx_TX_AF;   //引腳功能複用 來作為串列埠1的TX

   HAL_GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStruct);

   /* UART RX GPIO pin configuration  */

   GPIO_InitStruct.Pin = USARTx_RX_PIN;

   GPIO_InitStruct.Alternate = USARTx_RX_AF;

   HAL_GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStruct);

    /* NVIC for USART1 */

   HAL_NVIC_SetPriority(USARTx_IRQn, 0, 1);   //設定中斷優先順序

   HAL_NVIC_EnableIRQ(USARTx_IRQn);    //使能中斷

}

void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) //自己寫函式 失能串列埠功能

{

  失能外圍時鐘

    將GPIO和NVIC配置恢復到預設狀態

}

//it.c中的中斷函式

void USART1_IRQHandler(void)
{
   HAL_UART_IRQHandler(&UartHandle);
}

   //串列埠配置完成  

********************************************************************************

使能一下串列埠接收函式

uint8_t aRxBuffer,      //

HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer,1);  //串列埠配置完成後使能一下串列埠接收函式

傳送函式  怎麼使用可以自己封裝

uint8_t aTxBuffer[] = " ****UART_TwoBoards_ComIT****  ";

HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer,strlen(aTxBuffer));//把aTxBuffer資料傳送出去

//中斷回撥函式  程式自動呼叫  收到的資料會儲存到Data_BUF陣列中,每次使用完記得把 FramLength清零   變數全域性

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)

{

   if(FramLength<(BUF_MAX_LEN-1))   //判斷接受長度                  

     Data_BUF[FramLength++]=rxdata;

   HAL_UART_Receive_IT(&usart1_handler,&rxdata,1); //每次接收完之後重新使能串列埠接收接受一個位元組

}

相關推薦

STM32HAL中斷模式串列初始收發資料

hal庫裡面路徑:STM32Cube_FW_L0_V1.10.0\Projects\STM32L053C8-Discovery\Examples \UART\UART_TwoBoards_ComIT 工程是串列埠1中斷收發模式配置 UART_HandleTypeDef

串列程式設計之串列初始

Linux串列埠程式設計 常見資料通訊方式:並行通訊,序列通訊 UART的主要操作: 資料傳送及接受 產生中斷 產生波特率 Loopback模式 紅外模式 自動流控模式 串列埠引數的配置主要包括:波特率、資料位

STM32 HAL使用中斷實現串列接收不定長資料

  以前用DMA實現接收不定長資料,DMA的方法接收串列埠助手的資料,全部沒問題,不過如果接收模組返回的資料,而這些資料如果包含回車換行的話就會停止接收,例如接收:AT\r\nOK\r\n,就只能接收到AT\r,導致沒有接收完成,具體原因還沒搞懂,有了解的,希望可以告知一下,DMA不定長接收方法傳輸門:htt

串列驅動程式設計詳解---串列初始(上)

TTY驅動程式架構: 1. TTY概念解析     1.1 /dev/ttySCA0     1.2 /dev/tty1-n     1.3 /dev/console       在linux系統中,終端是一類字元型裝置,它包括多種型別,通常使用tty來簡稱各種型別的終端裝

stm32f4串列初始

IO口配置的一般步驟 1 定義一個IO口初始化結構體 2 IO時鐘使能 3 IO模式設定 4 呼叫IO口初始化函式 串列埠配置的一般步驟 1 定義一個IO口初始化結構體,定義一個串列埠初始化結構體 2 IO時鐘使能 3 串列埠時鐘使能 4 IO模式設定 5

stm32LCD必須進行串列初始

因為LCD_Init()裡有pinft串列埠輸出ID,如果main裡不初始化Uart的話,或者先LCD_Init()後Uart_Init(),都會出現下載後無反應; 且初始化串列埠必須設定系統中斷優先順序;

Linux下串列通訊詳解(上)開啟串列串列初始詳解

linux下串列埠通訊主要有下面幾個步驟 串列埠通訊流程圖 下面我會一一介紹這幾個步驟。 1.開啟串列埠 程式碼(串列埠為ttyUSB0) //開啟串列埠 int open_port(void) { int fd; fd=open("/dev/ttyUSB0

STM32f407與STM32F103 串列採用DMA收發資料配置方法的異同

最近有個專案需要用到STM32F407ZET6這款晶片,其中有一個串列埠收發資料的應用。因為之前有用過STMF32F103ZET6通過DMA收發資料的方案,所以我打算移植之前的程式碼實現這個功能,STM32F103的DMA相關介紹參見STM32F103 DMA介紹 之前專案使用的程式碼如下:

STM32F407的串列採用DMA收發資料

環境: 主機:WIN8 開發環境:MDK5.13 mcu: stm32f407VGT6 說明: 之前用STM32F103實現DMA收發串列埠資料,現在專案中採用STM32F407,所以將此機制移植到F4上。 STM32F

STM32配置CH375B成HID Host模式讀取自定義HID裝置的資料 ——STM32初始

  最近產品需要一個USB主機測試治具,所以需要做一個USB HOST去讀取HID裝置的資料,由於以前也沒做過USB方面的專案,對這一塊也不是很熟悉,因此遇到了很多困難,所幸的是經過兩天半的努力,最終完成了CH375B的除錯。不多廢話,先上一張我除錯的MCU管腳分配圖  標頭

STM32 HAL 串列DMA(收發)和STM32串列中斷接收(接收時間管理機制)+ESP8266 wifi模組通訊問題

一、HAL庫 串列埠 DMA+ESP8266模組通訊問題 用STM32 HAL庫串列埠的DMA傳送和空閒中斷接收處理資料,單片機發送AT指令給ESP8266 wifi模組問題:微控制器連續幾次給wifi模組傳送AT指令,wifi模組總是少一次的應答,在無線通訊過程中是不方便

雙重檢查鎖定的單例模式和延遲初始

懶漢式單例模式 如果 ron 線程並發 初始 mage 同步 locate 對象創建   有時候需要推遲一些高開銷的對象初始化操作,並且只有在使用這些對象時才進行初始化。此時,常用的可能就是延遲初始化,例如:懶漢式單例模式,但是要正確的實現線程安全的延遲初始化需要一些技巧,

MOOC清華《面向對象程序設計》第8章:用代理模式實現延遲初始

blank ngx cin www. oci 初始化 lanp margin 程序 Z9閃5PFVL衣坑9http://shequ.docin.com/zdfi78227 哦3O8b4z宦塹7http://huiyi.docin.com/dvok6368 W34搜6csiy

通用單例模式客戶端初始

HR span except util rop 16px exce div 參數 1 package util; 2 import org.web3j.protocol.geth.Geth; 3 import org.web3j.protocol.http.Http

資料結構】線性表的鏈式儲存連結串列初始、插入元素、刪除元素操作(三)

雙向連結串列的初始化插入與刪除 程式碼收穫 雙向連結串列刪除結點需要注意要刪除最後一個結點和不是最後一個結點分類討論。 插入和刪除時注意修改上一個結點裡指向下一個結點的指標與下一個結點裡指向上一個結點的指標。 #include <stdio.h>

STM32F10在iap和app模式下,除錯模式串列可以通訊,下載後卻不能通訊的問題

開發環境:iar for arm ,開發晶片是STM32F103, 問題點:在除錯模式下,usart1可以接受和傳送資料,但是下載到晶片內部時,或者使用iap升級之後就出現資料無法接受的問題。 第一就像想到的啟動檔案和中斷向量表沒有配置好: 如圖所示:ICF配置 對比之

連結串列初始以及查詢連結串列中倒數第k個節點的值

package com.xhy.stackandqueue; public class LinkedList { public static class Node { int value; Node next; public Nod

STM32的HAL學習挖坑-串列

第一次寫部落格,如有不足,請各位多多提點。實現功能:回顯串列埠助手傳送的資料,資料結束符為‘a’。參考例程:官網串列埠的printf例程。用到的串列埠函式介面:HAL_UART_Init-串列埠初始化函式HAL_UART_Transmit-串列埠傳送函式HAL_UART_Re

SD卡在SPI模式下的初始和詳細的代碼分析

是否 若有 細節 成功 oid 實驗 繼續 asi 初始化 SD卡在spi下的初始化:1、初始化與SD卡鏈接的硬件條件(mcu的spi配置, IO口配置)2、上電延時(>74個CLK)3、復位卡(CMD0),進入idle狀態4、發送CMD8,檢查是否支持2.0協議(C

stm32中一些常用基本函式以及串列配置步驟

常用基本庫函式:void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)//使能埠時鐘 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_In