版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)產(chǎn)品設(shè)計(jì)與制作
(stm32機(jī)型)項(xiàng)目9、利用UART實(shí)現(xiàn)LED燈控制任務(wù)9.1認(rèn)識(shí)STM32單片機(jī)的USART總目錄1項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警
2項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制
3項(xiàng)目3、利用按鍵查詢實(shí)現(xiàn)參數(shù)設(shè)定及顯示
4項(xiàng)目4、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)顯示
5項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電動(dòng)機(jī)PWM調(diào)速6項(xiàng)目6、利用計(jì)數(shù)器實(shí)現(xiàn)工件計(jì)數(shù)顯示和打包控制
7項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制8項(xiàng)目8、利用ADC實(shí)現(xiàn)土壤濕度采集
項(xiàng)目總目標(biāo)項(xiàng)目總目標(biāo)通過UART與UART通信、UART與PC機(jī)通信等工作任務(wù),掌握UART通信電路與程序設(shè)計(jì)方法。具體包括:1、了解單片機(jī)串行通信基本概念,能夠說出串行通信特點(diǎn)與分類;2、理解STM32F10x的UART結(jié)構(gòu)組成與工作特性,能夠?qū)φ战Y(jié)構(gòu)框圖說出其基本工作過程;3、掌握基于STM32F10xUART的電路設(shè)計(jì)方法,能進(jìn)行基本獨(dú)立設(shè)計(jì)與調(diào)試;4、掌握基于HAL庫(kù)函數(shù)的STM32F10xUART編程方法,能獨(dú)立編程實(shí)現(xiàn);5、會(huì)查找相關(guān)資料、閱讀相關(guān)文獻(xiàn)。子目錄9項(xiàng)目9、利用UART實(shí)現(xiàn)LED燈控制9.1任務(wù)9.1 認(rèn)識(shí)STM32單片機(jī)的USART9.2任務(wù)9.2 兩臺(tái)STM32UART通信系統(tǒng)的設(shè)計(jì)與調(diào)試9.3任務(wù)9.3 STM32UART與PC機(jī)通信系統(tǒng)設(shè)計(jì)與調(diào)試任務(wù)目標(biāo):1、能夠說出并行/串行通信、同步/異步通信、單工/半雙工/雙工通信的異同;2、知曉比特率的概念;3、知曉UART通信的數(shù)據(jù)傳送規(guī)則、電平約定和設(shè)備連接方法;4、看懂STM32F10xUSART結(jié)構(gòu)框圖。任務(wù)9.1認(rèn)識(shí)STM32單片機(jī)的UART分組討論自由發(fā)言,闡述對(duì)通信的認(rèn)識(shí),查閱資料了解STM32的通信方式討論與發(fā)言什么是并行通信和串行通信認(rèn)識(shí)串行通訊2、什么是比特率和波特率認(rèn)識(shí)串行通訊將每秒鐘傳輸二進(jìn)制數(shù)據(jù)的位數(shù)稱為比特率(BitRate)。如果每秒可傳送1000位數(shù)據(jù),則稱數(shù)據(jù)傳輸速率即比特率=1000位/秒=1000bit/second=1000bps波特率是指單位時(shí)間內(nèi)傳輸碼元的個(gè)數(shù)。波特率=比特率×2÷M,M是碼元的狀態(tài)數(shù)。2、什么是比特率和波特率認(rèn)識(shí)串行通訊將每秒鐘傳輸二進(jìn)制數(shù)據(jù)的位數(shù)稱為比特率(BitRate)。如果每秒可傳送1000位數(shù)據(jù),則稱數(shù)據(jù)傳輸速率即比特率=1000位/秒=1000bit/second=1000bps波特率是指單位時(shí)間內(nèi)傳輸碼元的個(gè)數(shù)。波特率=比特率×2÷M,M是碼元的狀態(tài)數(shù)。3、什么是單工通信和雙工通信認(rèn)識(shí)串行通訊單工通信(Simplex),是最簡(jiǎn)單的一種通信方式。在這種方式下,數(shù)據(jù)只能單向傳送。例如,日常生活中的廣播和電視。半雙工通信(HalfDuplex),指在同一條通路上數(shù)據(jù)可以雙向傳輸,但在同一時(shí)刻這條通路上只能有一個(gè)方向的數(shù)據(jù)在傳輸。例如,辯論。全雙工通信(FullDuplex),是指使用不同通路實(shí)現(xiàn)數(shù)據(jù)兩個(gè)方向的傳輸,從而使數(shù)據(jù)在兩個(gè)方向上可以同時(shí)進(jìn)行傳送。例如,電話4、什么是同步通信和異步通信認(rèn)識(shí)串行通訊同步通信,通過在發(fā)送端和接收端之間使用共同的時(shí)鐘從而使得它們保持“協(xié)調(diào)”。雖多占了一根IO線,數(shù)據(jù)傳輸速度快,適于需要高速通信的場(chǎng)合。異步通信,是指在發(fā)送端和接收端之間不存在共同的時(shí)鐘。雖然傳輸速率遠(yuǎn)低于同步通信,但在發(fā)送端和接收端無(wú)需額外的時(shí)鐘線。認(rèn)識(shí)STM32F10x的USART1、數(shù)量及名稱STM32F103ZET6有5個(gè)USART/UART。其中3個(gè)名為USART1、USART2和USART3,既可以進(jìn)行同步(Synchronous)通信也可以進(jìn)行異步(Asynchronous)通信。另外兩個(gè)名為UART4和UART5,只能進(jìn)行異步通信。2、支持的工作模式STM32F10x的USART/UART不僅支持全雙工的通用同步和異步通信,還支持半雙工單線通信等模式3、使用的引腳(1)異步通信使用的引腳Tx(Transmit)發(fā)送、Rx(Receive)接收,它們與GPIO引腳復(fù)用,(2)同步通信使用的引腳除了Tx和Rx外,還有同步時(shí)鐘引腳SCLK。SCLK復(fù)用的GPIO引腳也在表9.1.3中引腳APB2總線APB1總線USART1USART2USART3UART4UART5默認(rèn)重映射默認(rèn)重映射默認(rèn)重映射重映射默認(rèn)默認(rèn)TxPA9PB6PA2PD5PB10PC10PD8PC10PC12RxPA10PB7PA3PD6PB11PC11PD9PC11PD2SCLKPA8
PA4PD7PB12PC12PD10
4、工作時(shí)鐘USART1掛接在APB2總線上,其工作時(shí)鐘是PCLK2,最大頻率為72MHz。其他四個(gè)則掛接在APB1總線上,其工作時(shí)鐘是PCLK1,最大頻率為36MHz。5、USART功能框圖認(rèn)識(shí)STM32的DAC結(jié)構(gòu)項(xiàng)目總目標(biāo)項(xiàng)目總目標(biāo)通過UART與UART通信、UART與PC機(jī)通信等工作任務(wù),掌握UART通信電路與程序設(shè)計(jì)方法。具體包括:1、了解單片機(jī)串行通信基本概念,能夠說出串行通信特點(diǎn)與分類;2、理解STM32F10x的UART結(jié)構(gòu)組成與工作特性,能夠?qū)φ战Y(jié)構(gòu)框圖說出其基本工作過程;3、掌握基于STM32F10xUART的電路設(shè)計(jì)方法,能進(jìn)行基本獨(dú)立設(shè)計(jì)與調(diào)試;4、掌握基于HAL庫(kù)函數(shù)的STM32F10xUART編程方法,能獨(dú)立編程實(shí)現(xiàn);5、會(huì)查找相關(guān)資料、閱讀相關(guān)文獻(xiàn)。單片機(jī)產(chǎn)品設(shè)計(jì)與制作
(stm32機(jī)型)石梅香項(xiàng)目9、利用UART實(shí)現(xiàn)LED燈控制任務(wù)9.2兩臺(tái)STM32UART通信系統(tǒng)的設(shè)計(jì)與調(diào)試總目錄1項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警
2項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制
3項(xiàng)目3、利用按鍵查詢實(shí)現(xiàn)參數(shù)設(shè)定及顯示
4項(xiàng)目4、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)顯示
5項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電動(dòng)機(jī)PWM調(diào)速6項(xiàng)目6、利用計(jì)數(shù)器實(shí)現(xiàn)工件計(jì)數(shù)顯示和打包控制
7項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制8項(xiàng)目8、利用ADC實(shí)現(xiàn)土壤濕度采集
項(xiàng)目總目標(biāo)項(xiàng)目總目標(biāo)通過UART與UART通信、UART與PC機(jī)通信等工作任務(wù),掌握UART通信電路與程序設(shè)計(jì)方法。具體包括:1、了解單片機(jī)串行通信基本概念,能夠說出串行通信特點(diǎn)與分類;2、理解STM32F10x的UART結(jié)構(gòu)組成與工作特性,能夠?qū)φ战Y(jié)構(gòu)框圖說出其基本工作過程;3、掌握基于STM32F10xUART的電路設(shè)計(jì)方法,能進(jìn)行基本獨(dú)立設(shè)計(jì)與調(diào)試;4、掌握基于HAL庫(kù)函數(shù)的STM32F10xUART編程方法,能獨(dú)立編程實(shí)現(xiàn);5、會(huì)查找相關(guān)資料、閱讀相關(guān)文獻(xiàn)。子目錄9項(xiàng)目9、利用UART實(shí)現(xiàn)LED燈控制9.1任務(wù)9.1 認(rèn)識(shí)STM32單片機(jī)的USART9.2任務(wù)9.2 兩臺(tái)STM32UART通信系統(tǒng)的設(shè)計(jì)與調(diào)試9.3任務(wù)9.3 STM32UART與PC機(jī)通信系統(tǒng)設(shè)計(jì)與調(diào)試任務(wù)9.2兩臺(tái)STM32UART通信系統(tǒng)的設(shè)計(jì)與調(diào)試一、任務(wù)要求(一)總目標(biāo)1、能畫出兩臺(tái)STM32UART通信電路;2、能利用HAL_UART_Receive()和HAL_UART_Transmit()庫(kù)函數(shù)編寫兩臺(tái)STM32UART通信程序。(二)具體任務(wù)描述按下1#機(jī)K_UP鍵(PA0): 點(diǎn)亮2#機(jī)LED0;按下1#機(jī)K_DOWN鍵(PE2): 熄滅2#機(jī)LED0;按下1#機(jī)K_LEFT鍵(PE3): 點(diǎn)亮2#機(jī)LED0~LED7;按下1#機(jī)K_RIGHT鍵(PE4): 熄滅2#機(jī)LED0~LED7。分組討論要實(shí)現(xiàn)兩臺(tái)STM32的UART通信,電路和程序應(yīng)該怎樣設(shè)計(jì)討論與發(fā)言方案設(shè)計(jì)圖9.2.1系統(tǒng)方框圖電路設(shè)計(jì)由于1#機(jī)只發(fā)送,2#機(jī)只接收,圖中虛線也可以不接程序設(shè)計(jì)與調(diào)試1、1#程序文件布局與框架搭建程序設(shè)計(jì)與調(diào)試2、1#程序流程圖程序設(shè)計(jì)與調(diào)試3、1#程序主程序(1)第5行:聲明UART操作變量UART1_Handler,指出它是一個(gè)extern型變量(該變量在文件uart.c中被定義),數(shù)據(jù)類型是UART_HandleTypeDef。關(guān)于UART_HandleTypeDef類型詳情參見表9.2.1。(2)第7行:定義變量TX_Char,該變量用于存儲(chǔ)準(zhǔn)備從UART發(fā)送的數(shù)據(jù)。(3)第13行,調(diào)用函數(shù)UART1_Init(),初始化UART。該函數(shù)在uart.c中定義,帶一個(gè)參數(shù),用于指出波特率,這里是9600bps。(4)第16~20行:進(jìn)行按鍵采集,根據(jù)按鍵情況為變量TX_Char賦值。第22行:使用了庫(kù)函數(shù)HAL_UART_Transmit(),將變量TX_Char的值送入U(xiǎn)ART進(jìn)行發(fā)送。該函數(shù)共有4個(gè)參數(shù)程序設(shè)計(jì)與調(diào)試4、1#UART程序設(shè)計(jì)程序設(shè)計(jì)與調(diào)試4、1#UART程序設(shè)計(jì)(1)第2行:定義UART操作變量名為UART1_Handler,數(shù)據(jù)類型固定為UART_HandleTypeDef,用于指出用哪個(gè)UART,怎么發(fā)送或接收,具體要求參見表9.2.1。(2)第4~14行:UART初始化函數(shù)。該函數(shù)帶一個(gè)參數(shù)baund,用于指出波特率。(3)第5~11行用于設(shè)置變量UART1_Handler,指出使用USART1,波特率=bound、數(shù)據(jù)位+校驗(yàn)位字長(zhǎng)=8、1個(gè)停止位、無(wú)校驗(yàn)位、無(wú)硬件流控制、數(shù)據(jù)發(fā)送和接收模式。對(duì)于本應(yīng)用,由于1#機(jī)只進(jìn)行數(shù)據(jù)發(fā)送,也可將其設(shè)置為數(shù)據(jù)發(fā)送模式(UART_MODE_TX)。(4)第13行調(diào)用UART初始化庫(kù)函數(shù)HAL_UART_Init(),按照變量UART1_Handler的值進(jìn)行UART初始化。該庫(kù)函數(shù)定義參見表9.2.2。(5)第19~35行:執(zhí)行UART初始化庫(kù)函數(shù)HAL_UART_Init()時(shí),會(huì)自動(dòng)調(diào)用庫(kù)函數(shù)HAL_UART_MspInit()。此庫(kù)函數(shù)內(nèi)容可自行編寫。我們?cè)谶@里開啟USART1和GPIOA時(shí)鐘,初始化USART1的引腳PA9(Tx)和PA10(Rx)。注意PA9應(yīng)設(shè)置為復(fù)用推挽輸出,PA10應(yīng)設(shè)置為復(fù)用輸入。程序設(shè)計(jì)與調(diào)試5、UART相關(guān)庫(kù)函數(shù)解讀表9.2.1
UART操作變量UART操作變量數(shù)據(jù)類型:
UART_HandleTypeDef
typedef
struct
{ USART_TypeDef *Instance;
//UART名,取值有5個(gè):USART1~USART3、UART4~UART5
UART_InitTypeDef
Init;
//UART初始化參數(shù),定義見本表第3、4行
uint8_t *pTxBuffPtr;
//UART發(fā)送緩沖區(qū)首地址,指針變量
uint16_t TxXferSize;
//UART發(fā)送緩沖區(qū)長(zhǎng)度
uint16_t TxXferCount;
//UART發(fā)送計(jì)數(shù)器uint8_t *pRxBuffPtr;
//UART接收緩沖區(qū)首地址,指針變量
uint16_t RxXferSize;
//UART接收緩沖區(qū)長(zhǎng)度
uint16_t RxXferCount;
//UART接收計(jì)數(shù)器
DMA_HandleTypeDef *hdmatx;
//DMA
發(fā)送參數(shù)
DMA_HandleTypeDef *hdmarx;
//DMA
接收參數(shù)HAL_LockTypeDef Lock;
//鎖定對(duì)象
__IO
HAL_UART_StateTypeDefgState;
//發(fā)送狀態(tài)
__IO
HAL_UART_StateTypeDefRxState //接收狀態(tài)__IOuint32_t ErrorCode;
//錯(cuò)誤代碼}UART_HandleTypeDef;
UART初始化數(shù)據(jù)類型:
UART_InitTypeDeftypedef
struct
{ uint32_t BaudRate;
//波特率
uint32_t WordLength;
//字長(zhǎng)(數(shù)據(jù)位+奇偶校驗(yàn)位)
,有8位和9位兩個(gè)取值://UART_WORDLENGTH_8B(8位)、
UART_WORDLENGTH_9B(9位)uint32_t StopBits;
//停止位,有1和2兩個(gè)取值:UART_STOPBITS_1、UART_STOPBITS_2uint32_t Parity;
//奇偶校驗(yàn)位,有三個(gè)取值://UART_PARITY_NONE(無(wú))、UART_PARITY_EVEN(偶)
、UART_PARITY_ODD(奇)
uint32_t Mode;
//模式,有三個(gè)取值://UART_MODE_RX(接收)、UART_MODE_TX(發(fā)送)、UART_MODE_TX_RX(發(fā)送-接收)uint32_t HwFlowCtl;
//硬件流控制,有四個(gè)取值:UART_HWCONTROL_NONE(無(wú))、
//UART_HWCONTROL_RTS、UART_HWCONTROL_CTS、UART_HWCONTROL_RTS_CTS uint32_t OverSampling;
//過采樣系數(shù),默認(rèn)為16。如果定義了USART_CR1_OVER8,則默認(rèn)為8。
}UART_InitTypeDef;程序設(shè)計(jì)與調(diào)試5、UART相關(guān)庫(kù)函數(shù)解讀表9.2.2
UART初始化庫(kù)函數(shù)UART初始化函數(shù):
HAL_UART_Init(&UART操作變量)函數(shù)原型:HAL_StatusTypeDefHAL_UART_Init(UART_HandleTypeDef
*huart)
功能:初始化UART,并隱性調(diào)用庫(kù)函數(shù)HAL_UART_MSPInit()。入口參數(shù):huart,指出對(duì)哪個(gè)UART/USART進(jìn)行初始化,如何初始化。數(shù)據(jù)類型為:
UART_HandleTypeDef
,結(jié)構(gòu)體變量,其定義見表9.2.1。返回值:類型為HAL_StatusTypeDef,有四個(gè)取值:HAL_OK=0x00;
HAL_ERROR=0x01;
HAL_BUSY=0x02;
HAL_TIMEOUT=0x03
UART初始化隱性調(diào)用函數(shù):
HAL_UART_MSPInit(UART_HandleTypeDef
*huart)函數(shù)原型:__weakvoidHAL_UART_MSPInit(UART_HandleTypeDef
*huart)
功能:會(huì)被
HAL_UART_Init()自動(dòng)調(diào)用,用于完善UART初始化內(nèi)容,例如開啟UART時(shí)鐘,初始化相關(guān)引腳,設(shè)置中斷等。程序設(shè)計(jì)與調(diào)試5、UART相關(guān)庫(kù)函數(shù)解讀表9.2.3
UART發(fā)送庫(kù)函數(shù)(查詢方式)查詢發(fā)送函數(shù):
HAL_UART_Transmit(&UART操作變量,&數(shù)據(jù)首地址,數(shù)據(jù)個(gè)數(shù),超時(shí)時(shí)間)函數(shù)原型:HAL_StatusTypeDef
HAL_UART_Transmit(UART_HandleTypeDef
*huart,
uint8_t
*pData,
uint16_t
Size,
uint32_t
Timeout)功能:按照huart的設(shè)置,以查詢方式進(jìn)行UART數(shù)據(jù)發(fā)送。發(fā)送數(shù)據(jù)的首地址由pData指出,數(shù)據(jù)串長(zhǎng)度是Size,超時(shí)時(shí)間是Timeout。入口參數(shù)1:huart,是UART操作變量,數(shù)據(jù)類型為UART_HandleTypeDef
,結(jié)構(gòu)體變量。指出用哪個(gè)USART/UART發(fā)送。入口參數(shù)2:pData,發(fā)送數(shù)據(jù)緩沖區(qū)首地址,指針變量。入口參數(shù)3:size,發(fā)送緩沖區(qū)長(zhǎng)度。入口參數(shù)4:Timeout,超時(shí)時(shí)間,單位是ms。返回值:HAL_StatusTypeDef,有四個(gè)取值:HAL_OK=0x00;
HAL_ERROR=0x01;
HAL_BUSY=0x02;
HAL_TIMEOUT=0x03表9.2.4
UART接收庫(kù)函數(shù)(查詢方式)查詢接收函數(shù):
HAL_UART_Receive(&UART操作變量,&數(shù)據(jù)首地址,數(shù)據(jù)個(gè)數(shù),超時(shí)時(shí)間)函數(shù)原型:HAL_StatusTypeDef
HAL_UART_Receive(UART_HandleTypeDef
*huart,
uint8_t
*pData,
uint16_t
Size,
uint32_t
Timeout)功能:按照huart的設(shè)置,以查詢方式進(jìn)行UART數(shù)據(jù)接收。接收數(shù)據(jù)首地址由pData指出,數(shù)據(jù)串長(zhǎng)度是Size,超時(shí)時(shí)間是Timeout。入口參數(shù)1:huart,是UART操作變量,數(shù)據(jù)類型為UART_HandleTypeDef
,結(jié)構(gòu)體變量。指出用哪個(gè)USART/UART接收。入口參數(shù)2:pData,接收數(shù)據(jù)緩沖區(qū)首地址,指針變量。入口參數(shù)3:size,接收緩沖區(qū)長(zhǎng)度。入口參數(shù)4:Timeout,超時(shí)時(shí)間,單位是ms。返回值:HAL_StatusTypeDef,有四個(gè)取值:HAL_OK=0x00;
HAL_ERROR=0x01;
HAL_BUSY=0x02;
HAL_TIMEOUT=0x03程序設(shè)計(jì)與調(diào)試6、按鍵程序程序設(shè)計(jì)與調(diào)試7、利用串口調(diào)試助手調(diào)試程序1、下載程序到開發(fā)板對(duì)以上程序進(jìn)行編譯生成,無(wú)錯(cuò)后下載到1#開發(fā)板。2、安裝串口調(diào)試助手3、安裝CH340驅(qū)動(dòng)4、打開調(diào)試助手調(diào)試程序程序設(shè)計(jì)與調(diào)試7、調(diào)試程序設(shè)計(jì)與調(diào)試8、2#機(jī)程序設(shè)計(jì)程序文件布局與框架搭建和流程圖程序設(shè)計(jì)與調(diào)試8、2#主程序設(shè)計(jì)(1)第6行:定義變量RX_Char,該變量用于存儲(chǔ)從UART接收到的數(shù)據(jù)。(2)第11行,初始化UART1,注意波特率必須和1#機(jī)相同。(3)第13行:使用了庫(kù)函數(shù)HAL_UART_Receive(),將UART收到的數(shù)據(jù)存入變量RX_Char。與庫(kù)函數(shù)HAL_UART_Transmit()類似,也有4個(gè)參數(shù),只是第2個(gè)參數(shù)用于指出將收到的數(shù)據(jù)存到哪里。(4)第14~24行:對(duì)收到的數(shù)據(jù)進(jìn)行判別,根據(jù)輸入命令的不同,控制LED亮滅。有關(guān)庫(kù)函數(shù)HAL_UART_Receive()的解釋,詳見表9.2.4程序設(shè)計(jì)與調(diào)試8、2#uart和led程序設(shè)計(jì)
1、UART程序設(shè)計(jì)當(dāng)前設(shè)置為“UART_MODE_TX_RX”,無(wú)需改變。當(dāng)然由于本機(jī)只進(jìn)行接收,也可修改為“UART_MODE_RX”。2、LED程序設(shè)計(jì)程序設(shè)計(jì)與調(diào)試8、2#串口助手調(diào)試(1)對(duì)以上程序進(jìn)行編譯生成,無(wú)錯(cuò)后將程序下載到2#開發(fā)板。(2)用USB線通過“USB串口下載”接口將2#開發(fā)板連接到計(jì)算機(jī)上。(3)打開串口調(diào)試助手。(4)如圖9.2.12,點(diǎn)擊界面中“串口號(hào)”后面的向下箭頭,應(yīng)該能夠查找到CH340。(5)設(shè)置希望的波特率、數(shù)據(jù)格式等參數(shù),注意必須與uart.c中的設(shè)置一致。(6)點(diǎn)擊“打開串口”。按鈕應(yīng)變成綠色。(7)已經(jīng)打開串口(按鈕綠色)情況下,在下部的窗口中寫“1”,然后點(diǎn)擊“發(fā)送”按鈕,應(yīng)該觀察到2#開發(fā)板上的LED1點(diǎn)亮。說明串口調(diào)試助手發(fā)送的字符“1”被2#STM32UART1接收到并且成功點(diǎn)亮LED1。(8)在下部的窗口中分別寫“2”、“3”、“4”,應(yīng)觀察到LED能按照要求相應(yīng)動(dòng)作(9)調(diào)試完成后關(guān)閉串口調(diào)試助手,斷開STM32和PC機(jī)的連接。程序設(shè)計(jì)與調(diào)試8、雙機(jī)調(diào)試雙機(jī)聯(lián)調(diào)(1)將1#開發(fā)板的PA9、PA10、GND分別接到2#開發(fā)板的PA10、PA9、GND上。(2)給兩個(gè)開發(fā)板上電。(3)反復(fù)按下1#開發(fā)板四個(gè)按鍵之一,觀察2#開發(fā)板上的LED應(yīng)能對(duì)應(yīng)點(diǎn)亮或熄滅。單片機(jī)產(chǎn)品設(shè)計(jì)與制作
(stm32機(jī)型)石梅香項(xiàng)目9、利用UART實(shí)現(xiàn)LED燈控制任務(wù)9.3STM32UART與PC機(jī)通信系統(tǒng)設(shè)計(jì)與調(diào)試總目錄1項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警
2項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制
3項(xiàng)目3、利用按鍵查詢實(shí)現(xiàn)參數(shù)設(shè)定及顯示
4項(xiàng)目4、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)顯示
5項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電動(dòng)機(jī)PWM調(diào)速6項(xiàng)目6、利用計(jì)數(shù)器實(shí)現(xiàn)工件計(jì)數(shù)顯示和打包控制
7項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制8項(xiàng)目8、利用ADC實(shí)現(xiàn)土壤濕度采集
項(xiàng)目總目標(biāo)項(xiàng)目總目標(biāo)通過UART與UART通信、UART與PC機(jī)通信等工作任務(wù),掌握UART通信電路與程序設(shè)計(jì)方法。具體包括:1、了解單片機(jī)串行通信基本概念,能夠說出串行通信特點(diǎn)與分類;2、理解STM32F10x的UART結(jié)構(gòu)組成與工作特性,能夠?qū)φ战Y(jié)構(gòu)框圖說出其基本工作過程;3、掌握基于STM32F10xUART的電路設(shè)計(jì)方法,能進(jìn)行基本獨(dú)立設(shè)計(jì)與調(diào)試;4、掌握基于HAL庫(kù)函數(shù)的STM32F10xUART編程方法,能獨(dú)立編程實(shí)現(xiàn);5、會(huì)查找相關(guān)資料、閱讀相關(guān)文獻(xiàn)。子目錄9項(xiàng)目9、利用UART實(shí)現(xiàn)LED燈控制9.1任務(wù)9.1 認(rèn)識(shí)STM32單片機(jī)的USART9.2任務(wù)9.2 兩臺(tái)STM32UART通信系統(tǒng)的設(shè)計(jì)與調(diào)試9.3任務(wù)9.3 STM32UART與PC機(jī)通信系統(tǒng)設(shè)計(jì)與調(diào)試任務(wù)9.3STM32UART與PC機(jī)通信系統(tǒng)設(shè)計(jì)與調(diào)試一、任務(wù)要求(一)總目標(biāo)1、能完成STM32UART與PC機(jī)USB口通信電路的設(shè)計(jì);2、能完成STM32UART與PC機(jī)COM口通信電路的設(shè)計(jì);3、能利用HAL_UART_Transmit()和HAL_UART_Receive()函數(shù)編程實(shí)現(xiàn)STM32與PC機(jī)通信;4、能利用HAL_UART_Transmit_IT()和HAL_UART_Receive_IT()函數(shù)編程實(shí)現(xiàn)STM32與PC機(jī)通信;5、能利用getchar()和printf()函數(shù)編程實(shí)現(xiàn)STM32與PC機(jī)通信;6、能夠查找相關(guān)資料,看懂?dāng)?shù)據(jù)手冊(cè)。(二)具體任務(wù)描述PC機(jī)輸入“1”: STM32點(diǎn)亮LED0,并向PC機(jī)發(fā)送“LED0已點(diǎn)亮”;PC機(jī)輸入“2”: STM32熄滅LED0,并向PC機(jī)發(fā)送“LED0已熄滅”;PC機(jī)輸入“3”: STM32點(diǎn)亮LED0~LED7,并向PC機(jī)發(fā)送“LED0~LED7已點(diǎn)亮”;PC機(jī)輸入“4”: STM32熄滅LED0~LED7,并向PC機(jī)發(fā)送“LED0~LED7已熄滅”分組討論實(shí)現(xiàn)STM32USART與PC機(jī)通信需要哪些設(shè)備,如何設(shè)計(jì)電路,并予以記錄。在討論基礎(chǔ)上,閱讀以下資料,按照指導(dǎo)步驟和相關(guān)信息完成系統(tǒng)方案設(shè)計(jì)和器件選型討論與發(fā)言UART與PC機(jī)USB口連接電路設(shè)計(jì)1、認(rèn)識(shí)USB接口方案設(shè)計(jì)
STM32
UART與PC機(jī)的USB口連接方案電路設(shè)計(jì)左側(cè)為PC機(jī)的USB接口,右側(cè)為STM32及LED電路,中間部分為USB/UART轉(zhuǎn)換電路。電路測(cè)試(1)在開發(fā)板上找到USB串口模塊和USB串口下載接口,如圖9.3.5。(2)斷電,電源指示燈熄滅。(3)用萬(wàn)用表測(cè)量STM32的PA9(Tx),應(yīng)與CH340的3腳(RXD)相連。PA10(Rx)應(yīng)與CH340的2腳(TXD)通過DV3相連。(4)用萬(wàn)用表測(cè)量CH340的5腳(D+)和6腳(D-),應(yīng)分別與板上的USB串口下載接口的2號(hào)和3號(hào)引腳相連。(5)用USB線連接USB串口下載接口到電腦上。(6)按下電源開關(guān),電源指示燈點(diǎn)亮。(7)測(cè)量CH340的VCC(16腳)電壓應(yīng)約為5V。UART與PC機(jī)COM口連接電路設(shè)計(jì)(1)認(rèn)識(shí)COM口工控機(jī)、智能儀表、觸摸屏、I/O板卡、I/O模塊以及早期的PC機(jī)上常配有COM口即串口連接器,彼此間可通過COM口及連接電纜接在一起,如圖9.3.6所示。COM口又分為RS-232、RS-422、RS-485等。這里我們學(xué)習(xí)RS-232。(2)RS-232通信接口的型式RS-232通信接口連接器有25針和9針兩種,目前主要使用9針,也稱DB9,如圖9.3.7所示。分公頭(male)和母頭(female)兩種,其尺寸、插針的排列位置有明確規(guī)定。UART與PC機(jī)COM口連接電路設(shè)計(jì)(3)RS-232接口定義表9.3.2
RS-232接口定義針號(hào)名稱功能方向針號(hào)名稱功能方向1DCD數(shù)據(jù)載波檢出輸入6DSR數(shù)據(jù)裝置就緒輸入2RXD接收數(shù)據(jù)輸入7RTS請(qǐng)求發(fā)送輸出3TXD發(fā)送數(shù)據(jù)輸出8CTS允許發(fā)送輸入4DTR數(shù)據(jù)終端就緒輸出9RI振鈴指示輸入5GND信號(hào)地-
(4)RS-232信號(hào)電平之前學(xué)習(xí)的UART,采用TTL或CMOS電平,5V表示邏輯“1”,0V表示邏輯“0”。RS-232則不同,RS-232使用-15V表示邏輯“1”,+15V表示邏輯“0”,如表9.3.3所示。通信標(biāo)準(zhǔn)邏輯值標(biāo)準(zhǔn)電平電壓范圍5VTTL“1”5V2.4V~5V“0”0V0~0.5VRS-232“1”-15V-15V~-3V“0”+15V+3V~+15V表9.3.3
TTL電平和RS-232電平標(biāo)準(zhǔn)UART與PC機(jī)COM口連接電路設(shè)計(jì)(4)RS-232數(shù)據(jù)傳送規(guī)則RS-232接口的數(shù)據(jù)傳送規(guī)則與UART相同,如圖9.3.8所示,二者只是電平標(biāo)準(zhǔn)有差異。方案設(shè)計(jì)STM32UART與PC機(jī)的COM(RS-232)口連接方案RS-232/UART轉(zhuǎn)換芯片SP3232表9.3.4
SP3232引腳定義引腳名稱功能引腳名稱功能11T1IN第1路T(Transmit,發(fā)送)輸入,TTL14TIOUT第1路T(Transmit,發(fā)送)輸出,RS-23213R1IN第1路R(Receive,接收)輸入,RS-23212R1OUT第1路R(Receive,接收)輸出,TTL10T2IN第2路T(Transmit,發(fā)送)輸入,TTL7T2OUT第2路T(Transmit,發(fā)送)輸出,RS-2328R2IN第2路R(Receive,接收)輸入,RS-2329R2OUT第2路R(Receive,接收)輸出,TTL2V+電荷泵生成的+5.5V6V-電荷泵生成的-5.5V1C1+倍增電荷泵電容正極3C1-倍增電荷泵電容負(fù)極4C2+反相電荷泵電容正極5C2-反相電荷泵電容負(fù)極16VCC供電電源正極15GND供電電源負(fù)極電路設(shè)計(jì)電路設(shè)計(jì)(STM32UART3與PC機(jī)COM口連接)電路測(cè)試(1)如圖9.3.12,在開發(fā)板上找到COM3模塊和芯片SP3232。(2)用短路插將P232上的PB10和TX、PB11和RX連接在一起(朝向COM3F位置)。(3)給開發(fā)板上電,測(cè)量SP3232的VCC(16腳)電壓應(yīng)與板上3.3V供電電壓相同。經(jīng)過電荷泵的增壓作用,V+(2腳)和V-(6腳)應(yīng)分別得到+5.5V和-5.5V左右的電壓。(4)將PB10接至電源引腳3.3,給PB10送TTL的“1”,應(yīng)該在母頭的TIOUT(2腳)得到RS-232電平的“1”,電壓約為-5.5V。(5)將PB10接至電源引腳GND,給它送TTL的“0”,應(yīng)該在母頭的TIOUT(2腳)得到RS-232電平的“0”,電壓約為+5.5V。(6)將母頭3號(hào)引腳即RS-232的RX接至電源引腳3.3,給它送RS-232電平的“0”,應(yīng)該在PB11引腳得到TTL電平“0”,電壓約為0V。(7)將母頭3號(hào)引腳即RS-232的RX接至電源引腳GND,給它送RS-232電平的“1”,應(yīng)該在PB11引腳得到TTL的“1”,電壓約3.3V。程序設(shè)計(jì)與調(diào)試1、程序文件布局與框架搭建(1)復(fù)制文件夾:09-01-兩臺(tái)STM32-UART-receive。(2)修改副本文件夾名為:09-02-PC-UART-LED-transmit和receive。
(3)打開文件夾,修改工程名為:PC-UART-LED,雙擊打開工程。程序設(shè)計(jì)與調(diào)試2、程序流程圖程序設(shè)計(jì)與調(diào)試3、程序主程序(1)第8~16行:定義了9個(gè)字符串?dāng)?shù)組,用于存儲(chǔ)STM32準(zhǔn)備發(fā)給PC機(jī)的信息。(2)第25~29行:用庫(kù)函數(shù)HAL_UART_Transmit()向PC機(jī)發(fā)送信息。待發(fā)送字符分別在數(shù)組TX_str1~TX_str5里。由于數(shù)組名即代表數(shù)組所在存儲(chǔ)區(qū)首地址,因此第2個(gè)參數(shù)TX_str1~TX_str5前可以不加地址操作符“&”(加了也不會(huì)錯(cuò))。(3)第33行:用庫(kù)函數(shù)HAL_UART_Receive()接收PC機(jī)送入的命令。(4)第34~54行,根據(jù)輸入命令控制LED,并向PC機(jī)回送信息。程序設(shè)計(jì)與調(diào)試5、STM32UART程序設(shè)計(jì)不變。注意必須將UART設(shè)置為收發(fā)模式。6、STM32LED程序設(shè)計(jì)不變。程序設(shè)計(jì)與調(diào)試7、調(diào)試程序(1)用ARM仿真器將開發(fā)板和計(jì)算機(jī)連到一起,以便進(jìn)行程序下載與調(diào)試,(2)對(duì)以上程序進(jìn)行編譯生成無(wú)誤后,將程序下載到開發(fā)板。(3)將開發(fā)板的“USB串口下載”接口和計(jì)算機(jī)連接在一起,以便使USART1能夠與PC機(jī)進(jìn)行通信。(4)打開計(jì)算機(jī)上的串口調(diào)試助手,找到串口,設(shè)置好參數(shù),打開串口,如圖9.3.15。(5)串口調(diào)試助手中應(yīng)有命令提示信息顯示。(6)如果顯示字符不正確,可設(shè)置字符編碼為:GB2312_GBK,即可支持中文。(7)輸入命令例如“1”。(8)串口調(diào)試助手會(huì)報(bào)告“LED1已點(diǎn)亮”,觀察開發(fā)板上LED1應(yīng)點(diǎn)亮。(9)輸入其它命令,串口調(diào)試助手顯示內(nèi)容以及開發(fā)板上LED狀態(tài),應(yīng)與命令一致。程序設(shè)計(jì)與調(diào)試如何進(jìn)行多字節(jié)數(shù)據(jù)發(fā)送/接收進(jìn)一步認(rèn)識(shí)UART查詢庫(kù)函數(shù)(1)查詢方式查詢方式是在數(shù)據(jù)發(fā)送/接收過程中,查詢表9.1.4中的狀態(tài)位。根據(jù)這些狀態(tài)位的值決定下一步的操作。在進(jìn)行數(shù)據(jù)發(fā)送時(shí),可查詢TXE位或TC位。(2)庫(kù)函數(shù)HAL_UART_Transmit()和HAL_UART_Receive()的工作過程進(jìn)一步認(rèn)識(shí)UART查詢庫(kù)函數(shù)中斷方式中斷方式是在進(jìn)行數(shù)據(jù)發(fā)送或接收時(shí),允許表9.1.4所示的某個(gè)或某幾個(gè)中斷請(qǐng)求,例如允許RXNE中斷。只要RXNE=1,無(wú)需查詢,CPU會(huì)停止當(dāng)前操作,自動(dòng)進(jìn)入U(xiǎn)ART中斷程序,在UART中斷服務(wù)程序中將RDR內(nèi)的數(shù)據(jù)取走存到接收緩沖區(qū)對(duì)應(yīng)單元,之后返回。在RXNE=0期間,CPU無(wú)需等待,可進(jìn)行自己的事務(wù)處理。采用中斷方式進(jìn)行數(shù)據(jù)發(fā)送與接收使用的庫(kù)函數(shù)是HAL_UART_Transmit_IT()和HAL_UART_Receive_IT()。我們先看一下如何利用它們實(shí)現(xiàn)本任務(wù)。最后再對(duì)這種方式加以總結(jié)。用庫(kù)函數(shù)編程實(shí)現(xiàn)利用HAL_UART_Transmit_IT()和HAL_UART_Receive_IT()編程實(shí)現(xiàn)1、程序文件布局和框架搭建(1)復(fù)制文件夾:09-02-PC-UART-LED-transmit和receive。(2)修改副本文件夾名為:09-03-PC-UART-LED-transmit_IT和receive_IT,其他不變。(3)打開工程。2、PC機(jī)程序設(shè)計(jì)不編程。程序設(shè)計(jì)與調(diào)試stm32主程序(1)將所有的HAL_UART_Transmit()替換為HAL_UART_Transmit_IT(),即將原來(lái)的查詢方式發(fā)送改為中斷方式發(fā)送。(2)將所有的HAL_UART_Receive()替換為HAL_UART_Receive_IT(),即將原來(lái)的查詢方式接收改為中斷方式接收。注意HAL_UART_Transmit_IT()和HAL_UART_Receive_IT()的參數(shù)只有3個(gè),沒有超時(shí)時(shí)間。前三個(gè)參數(shù)分別指出用哪個(gè)UART,待發(fā)送/接收數(shù)據(jù)在哪里,長(zhǎng)度是多少。HAL_UART_Transmit_IT()和HAL_UART_Receive()函數(shù)的功能解釋如表9.3.5和9.3.6。每次發(fā)送后插入了100ms的延時(shí),確保前一次發(fā)送結(jié)束再開始新的發(fā)送。(3)第7行:將變量RX_char定義為1個(gè)數(shù)組變量,長(zhǎng)度=1。定義為數(shù)組變量的好處是可存儲(chǔ)多個(gè)字節(jié)的數(shù)據(jù),方便將來(lái)進(jìn)行程序功能的擴(kuò)展。當(dāng)然本程序只需1個(gè)字節(jié),因此也可以不修改,仍像以前一樣將其定義為1個(gè)char型變量。(4)第33行:由于RX_char被定義為數(shù)組變量,數(shù)組的名字即代表了其首地址,因此庫(kù)函數(shù)HAL_UART_Receive_IT()的第二個(gè)參數(shù)RX_char前面的地址操作符“&”可以不寫(5)第35行:對(duì)應(yīng)第7行的變化,應(yīng)修改為switch(RX_char[0]),對(duì)數(shù)組內(nèi)的第0個(gè)元素的值進(jìn)行判斷。如果寫成switch(RX_char),是對(duì)數(shù)組RX_char的地址進(jìn)行判斷,這顯然不對(duì)。程序設(shè)計(jì)與調(diào)試uart程序UART中斷庫(kù)函數(shù)解讀表9.3.5
UART發(fā)送中斷開啟庫(kù)函數(shù)中斷發(fā)送函數(shù):
HAL_UART_Transmit_IT(&UART操作變量,&數(shù)據(jù)首地址,數(shù)據(jù)個(gè)數(shù))函數(shù)原型:HAL_StatusTypeDef
HAL_UART_Transmit_IT(UART_HandleTypeDef
*huart,,uint8_t
*pData,
uint16_t
Size)功能:按照huart的設(shè)置,開啟UART的TXE中斷。指出發(fā)送數(shù)據(jù)的首地址pData,指出數(shù)據(jù)串長(zhǎng)度Size。入口參數(shù)1:huart,是UART操作變量,數(shù)據(jù)類型為UART_HandleTypeDef,結(jié)構(gòu)體變量。指出用哪個(gè)USART/UART發(fā)送。入口參數(shù)2:pData,發(fā)送數(shù)據(jù)緩沖區(qū)首地址,指針變量。入口參數(shù)3:size,發(fā)送緩沖區(qū)長(zhǎng)度。返回值:HAL_StatusTypeDef,有四個(gè)取值:HAL_OK=0x00;
HAL_ERROR=0x01;
HAL_BUSY=0x02;
HAL_TIMEOUT=0x03表9.3.6
UART接收中斷開啟庫(kù)函數(shù)中斷接收函數(shù):
HAL_UART_Receive_IT(&UART操作變量,&數(shù)據(jù)首地址,數(shù)據(jù)個(gè)數(shù))函數(shù)原型:HAL_StatusTypeDef
HAL_UART_Receive_IT(UART_HandleTypeDef
*huart,,uint8_t
*pData,
uint16_t
Size)功能:按照huart的設(shè)置,開啟UART的RXNE中斷。指出接收數(shù)據(jù)的首地址pData,指出數(shù)據(jù)串長(zhǎng)度Size。入口參數(shù)1:huart,是UART操作變量,數(shù)據(jù)類型為UART_HandleTypeDef,結(jié)構(gòu)體變量。指出用哪個(gè)USART/UART接收。入口參數(shù)2:pData,接收數(shù)據(jù)緩
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)意設(shè)計(jì)服務(wù)協(xié)議書(2篇)
- 易錯(cuò)點(diǎn)12 抗日戰(zhàn)爭(zhēng)時(shí)期的主要史實(shí)與時(shí)間-備戰(zhàn)2023年中考?xì)v史考試易錯(cuò)題(原卷版)
- 黃金卷6-【贏在中考·黃金八卷】(解析版)
- DB33T 2195-2019 家庭醫(yī)生簽約服務(wù)居家護(hù)理工作規(guī)范
- 以社區(qū)為基礎(chǔ)之糖尿病個(gè)案管理與疾病管理
- 2022-2023學(xué)年山東省聊城市高一上學(xué)期期末考試地理試題(解析版)
- 阜陽(yáng)熱熔膠項(xiàng)目可行性研究報(bào)告
- 2024年度四川省公共營(yíng)養(yǎng)師之四級(jí)營(yíng)養(yǎng)師模擬題庫(kù)及答案下載
- 2024年度四川省公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師自我檢測(cè)試卷B卷附答案
- 2025關(guān)于拆遷安置房買賣合同的效力認(rèn)定
- 2023漿體長(zhǎng)距離管道輸送工程
- 初二英語(yǔ)寒假作業(yè)安排表 - 揚(yáng)中樹人歡迎您
- 基于Android系統(tǒng)的天氣預(yù)報(bào)APP設(shè)計(jì)
- 市政工程危險(xiǎn)源識(shí)別與風(fēng)險(xiǎn)評(píng)價(jià)一覽表
- 道路施工臨時(shí)占道施工應(yīng)急保暢方案隧道
- 2024屆高考語(yǔ)文復(fù)習(xí):作文主題訓(xùn)練人文情懷
- 炊事員個(gè)人衛(wèi)生習(xí)慣養(yǎng)成-課件
- 粉末涂料有限公司邦定攪拌機(jī)安全風(fēng)險(xiǎn)分級(jí)管控清單
- Clean-PVC管道粘接施工工藝標(biāo)準(zhǔn)
- 道教與中醫(yī)學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫(kù)2023年
- 四年級(jí)語(yǔ)文試卷選擇題100道
評(píng)論
0/150
提交評(píng)論