硬件工程實(shí)踐報告_第1頁
硬件工程實(shí)踐報告_第2頁
硬件工程實(shí)踐報告_第3頁
硬件工程實(shí)踐報告_第4頁
硬件工程實(shí)踐報告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、深圳大學(xué)實(shí)驗報告課程名稱: 硬件工程實(shí)踐實(shí)驗項目名稱:串口實(shí)驗; ADC實(shí)驗學(xué)院:醫(yī)學(xué)院指導(dǎo)教師:董磊報告人(組長): 葉秋思學(xué)號:2012220034專業(yè)年級:生物醫(yī)學(xué)工程2012 班級:02報告人(組員): 王凌峰學(xué)號:2012220042專業(yè)年級:醫(yī)療器械工程2012 班級:01報告人(組員): 盧健聰學(xué)號:2012220043專業(yè)年級:醫(yī)療器械工程2012 班級:01實(shí)驗時間:2014.112014.12實(shí)驗報告提交時間: 2015.1.4實(shí)驗?zāi)康呐c要求:1. STM32 通過串口和上位機(jī)的對話, STM32 在收到上位機(jī)發(fā)過來的字符串后,控制LED燈( DS0)亮滅;2. 用定時器

2、6 觸發(fā) DAC1和 DAC2輸出不同電壓 (不超過 3.3V),用定時器 3 觸發(fā) ADC1, 使其兩個通道分別采集并輸出DAC1和 DAC2輸出的電壓。例如:用定時器 6 觸發(fā),使 DAC1輸出 1V 電壓, DAC2輸出 2V 電壓 (PA4引腳對 應(yīng) DAC1,PA5引腳對應(yīng) DAC2);用定時器 3觸發(fā) ADC1,使其第 7通道 PA7和第 8通 道 PB0 分別采集 PA4和 PA5的輸出電壓。方法、步驟:硬件部分ALIENTEK MiniSTM32 開發(fā)板CPU:STM32F103RCT6 LQFP64 FLASH:256K SRA:M 48KUSB 數(shù)據(jù)線NOTEBOOK: A

3、SUS A85VD O:SWindows 8.1 Pro x64軟件部分編譯環(huán)境: KEIL MDK-ARM Version 5.10STM32F10x Standard Peripherals Library(標(biāo)準(zhǔn)外設(shè)庫)STM ISP 下載器: MCUISP 串口調(diào)試助手: XCOM V2.0 文檔部分 參考文檔: 1 STM32不完全手冊 - 庫函數(shù)版本 _V3.0 2 STM32中文參考手冊 _V10外部鏈接: (STM32F1 Series -STMicroelectronics)manual/CD00171190.pdf (Reference manualSTM32F101xx,

4、STM32F102xx, STM32F103xx, STM32F105xx andSTM32F107xx advanced ARM? -based 32-bit MCUs)/wiki/STM32( 維基百科, STM32)( 開源電子網(wǎng) )一、 串口實(shí)驗根據(jù)實(shí)驗要求,在 KEIL 編譯環(huán)境下編寫程序,生成 *.HEX文件; 通過 STM ISP 下載器( MCUISP)將程序下載到 STM32開發(fā)板中,運(yùn)行程序; 使用 USB數(shù)據(jù)線連接 STM32開發(fā)板上的 USB_232接口,通過串口調(diào)試助手 (XCOM V2.0)發(fā)送指令字符串 1,使得 STM

5、32開發(fā)板上的指示燈 DS0亮 (紅燈),發(fā)送指令字符串 0,使得 STM32開發(fā)板上的指示燈 DS0熄滅;1. 安裝及配置 KEIL(MDK-ARM Version 5.10 )軟件 ;2. 參考 STM32不完全手冊 -庫函數(shù)版本 _V3.0 第三篇 - 第八章 - 串口實(shí) 驗;2.1 STM32 串口簡介串口作為 MCU 的重要外部接口, 同時也是軟件開發(fā)重要的調(diào)試手段, 其重要性不言 而喻。 現(xiàn)在基本上所有的 MCU 都會帶有串口, STM32 自然也不例外。串口設(shè)置的一般步驟可以總結(jié)為如下幾個步驟:1) 串口時鐘使能, GPIO 時鐘使能2) 串口復(fù)位3) GPIO 端口模式設(shè)置4)

6、 串口參數(shù)初始化5) 開啟中斷并且初始化 NVIC (如果需要開啟中斷才需要這個步驟)6) 使能串口7) 編寫中斷處理函數(shù)(具體參考 STM32中文參考手冊 _V10第 25章 - 通用同步異步收發(fā)器 (USART)3. 以“標(biāo)準(zhǔn)例程 -V3.5 庫函數(shù)版本 - ALIENTEKM INISTM32 實(shí)驗 3 串口實(shí)驗” 中的程序源碼作為參考 ( 原程序?qū)崿F(xiàn)如下功能: STM32 通過串口和上位機(jī)的對話, STM32 在收到上位機(jī)發(fā)過來的字符串后,原原本本的返回給上位機(jī) ) ,打開程序源碼目錄下的工 程文件( USART.uvproj),然后在 KEIL 編譯環(huán)境下修改 SYSTEM目錄下的

7、文件以及 USER目錄下的 文件;#include led.h#include sys.h#include usart.h/ 如果使用 ucos, 則包括下面的頭文件即可 .#if SYSTEM_SUPPORT_UCOS#include includes.h /ucos 使用#endif/ 本程序僅供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途/ALIENTEK STM32 開發(fā)板/ 串口 1 初始化/ 正點(diǎn)原子 ALIENTEK/ 技術(shù)論壇 :/ 修改日期 :2012/8/18/ 版本: V1.5/ 版權(quán)所有,盜版必究。/Copyright(C) 廣州市星翼電子科技有限公司 2009-201

8、9/All rights reserved/*/V1.3 修改說明/ 支持適應(yīng)不同頻率下的串口波特率設(shè)置 ./ 加入了對 printf 的支持/ 增加了串口接收命令功能 ./ 修正了 printf 第一個字符丟失的 bug/V1.4 修改說明/1, 修改串口初始化 IO 的 bug/2, 修改了 USART_RX_STA,使得串口最大接收字節(jié)數(shù)為 2的14 次方/3, 增加了 USART_REC_LEN,用于定義串口最大允許接收的字節(jié)數(shù) (不大于 2的14 次方)/4, 修改了 EN_USART1_RX 的使能方式/V1.5 修改說明/1, 增加了對 UCOSII 的支持 / / 加入以下代碼

9、 ,支持 printf 函數(shù) ,而不需要選擇 use MicroLIB #if 1#pragma import(_use_no_semihosting)/ 標(biāo)準(zhǔn)庫需要的支持函數(shù)struct _FILEint handle;FILE _stdout;/ 定義 _sys_exit() 以避免使用半主機(jī)模式_sys_exit(int x)x = x;/ 重定義 fputc 函數(shù)int fputc(int ch, FILE *f) while(USART1-SR&0X40)=0); /循環(huán)發(fā)送 ,直到發(fā)送完畢USART1-DR = (u8) ch;return ch;#endif/* 使用 micro

10、Lib 的方法 */*int fputc(int ch, FILE *f) USART_SendData(USART1, (uint8_t) ch);while (USART_GetFlagStatus(USART1, USART_FLAG_TC) = RESET) return ch; int GetKey (void) while (!(USART1-SR & USART_FLAG_RXNE);return (int)(USART1-DR & 0x1FF); */ 串口 1 中斷服務(wù)程序/ 注意 ,讀取 USARTx-SR 能避免莫名其妙的錯誤u8 USART_RX_BUFUSART_RE

11、C_LEN; / 接收緩沖 ,最大 USART_REC_LEN 個字節(jié) . / 接收狀態(tài)/bit15 , 接收完成標(biāo)志/bit14 , 接收到 0x0d/bit130 , 接收到的有效字節(jié)數(shù)目u16 USART_RX_STA=0;/ 接收狀態(tài)標(biāo)記/ 初始化 IO 串口 1 /bound: 波特率 void uart_init(u32 bound)/GPIO 端口設(shè)置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;ENABL

12、E);RCC APB2PeriphClockCmd(RCC APB2Periph USART1|RCC APB2Periph GPIOA,/ 使能 USART1 ,GPIOA 時鐘USART_DeInit(USART1); / 復(fù)位串口 1/USART1_TX PA.9/ 復(fù)用推挽輸出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GP

13、IOA, &GPIO_InitStructure); / 初始化 PA9/USART1_RXPA.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; / 浮空輸入 GPIO_Init(GPIOA, &GPIO_InitStructure); / 初始化 PA10/Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;搶占優(yōu)先級 3/ 子優(yōu)先級 3/IRQ 通道使能VIC 寄存器NV

14、IC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; / NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); / 根據(jù)指定的參數(shù)初始化/USART 初始化設(shè)置USART_InitStructure.USART_BaudRate = bound; / 一般設(shè)置為 9600;USART_InitStructure.USART_WordLen

15、gth = USART_WordLength_8b; /字長為 8 位數(shù)據(jù)格式USART_InitStructure.USART_StopBits = USART_StopBits_1; / 一個停止位 USART_InitStructure.USART_Parity = USART_Parity_No; /無奇偶校驗位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;/ 無硬件數(shù)據(jù)流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | U

16、SART_Mode_Tx; / 收發(fā)模式USART_Init(USART1, &USART_InitStructure); / 初始化串口 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); / 開啟中斷 USART_Cmd(USART1, ENABLE); / 使能串口#if EN_USART1_RX / 如果使能了接收void USART1_IRQHandler(void) / 串口 1 中斷服務(wù)程序 u8 Res;#ifdef OS_TICKS_PER_SEC/ 如果時鐘節(jié)拍數(shù)定義了 ,說明要使用 ucosII 了.OSIntEnter();#e

17、ndif/ 接收中斷 (接收到的數(shù)據(jù)必須if(USART GetITStatus(USART1, USART IT RXNE) != RESET)是 0x0d 0x0a 結(jié)尾 )Res =USART_ReceiveData(USART1);/(USART1-DR); / 讀取接收到的數(shù)據(jù)if(Res=1)LED0=0;else if(Res=0) LED0=1;#ifdef OS_TICKS_PER_SEC/ 如果時鐘節(jié)拍數(shù)定義了 ,說明要使用 ucosII 了.OSIntExit();#endif#endif#include delay.h#include led.h#include sys

18、.h#include usart.h/ALIENTEK Mini STM32 開發(fā)板范例代碼 3/ 串口實(shí)驗/ 技術(shù)支持: / 廣州市星翼電子科技有限公司int main(void)u8 t;u8 len;u16 times=0;delay_init();/ 延時函數(shù)初始化NVIC_Configuration(); / 設(shè)置中斷優(yōu)先級分組 uart_init(9600);/ 串口初始化為 9600LED_Init(); / 初始化與 LED 連接的硬件接口while(1)4. 編譯生成 *.HEX 文件;5. 下載驗證, 將程序(USART.hex)下載到 MiniSTM32 開發(fā)板中, 運(yùn)行

19、程序;6. 運(yùn)行串口調(diào)試助手 XCOM,波特率設(shè)置為 9600,選擇單條發(fā)送,其他選項 設(shè)置為默認(rèn)值; 發(fā)送指令字符串 1,驗證 MiniSTM32 開發(fā)板上的指示燈 DS0是否亮起; 發(fā)送指令字符串 0,驗證 MiniSTM32 開發(fā)板上的指示燈 DS0是否熄滅; 運(yùn)行結(jié)果:ADC實(shí)驗1. 用定時器 6 觸發(fā) DAC1和 DAC2輸出不同電壓(不超過 3.3V ),用定時器 3 觸發(fā) ADC1,使其兩個通道分別采集并輸出 DAC1和 DAC2輸出的電壓。 例如:用定時器 6 觸發(fā),使 DAC1輸出 1V電壓, DAC2輸出 2V電壓 (PA4 引腳對應(yīng) DAC1,PA5引腳對應(yīng) DAC2);

20、用定時器 3 觸發(fā) ADC1,使其第 7 通 道 PA7和第 8 通道 PB0 分別采集 PA4和 PA5 的輸出電壓。2. 參考STM32不完全手冊 -庫函數(shù)版本 _V3.0 的第三篇 - 第二十章 - ADC 實(shí)驗,第二十二章 DAC 實(shí)驗;以及 STM32中文參考手冊 _V10的第 11章 - 模擬/數(shù)字轉(zhuǎn)換(ADC),第 12章 - 數(shù)字/模擬轉(zhuǎn)換(DAC);2.1 STM32 ADC簡 介STM32擁有 1-3 個 ADC( STM32F101/102 系列只有 1 個 ADC),這些 ADC可以獨(dú) 立使用, 也可以使用雙重模式(提高采樣率) 。STM32 的 ADC 是 12 位逐

21、次逼近型 的模擬數(shù)字轉(zhuǎn)換器。 它有 18個通道,可測量 16 個外部和 2個內(nèi)部信號源。各通道 的 A/D 轉(zhuǎn)換可以單次、連續(xù)、掃 描或間斷模式執(zhí)行。 ADC 的結(jié)果可以左對齊或右 對齊方式存儲在 16 位數(shù)據(jù)寄存器中。模擬看門狗特性允許應(yīng)用程序檢測輸入電壓是 否超出用戶定義的高 / 低閥值。STM32F103 系列最少都擁有 2個 ADC,我們選擇的 STM32F103RCT 包含有 3 個 ADC。 STM32 的 ADC 最大的轉(zhuǎn)換速率為1Mhz ,也就是轉(zhuǎn)換時間為 1us (在ADCCLK=14M采, 樣周期 為 1.5 個 ADC 時鐘下得到) ,不要讓 ADC 的時鐘超過 14M,

22、 否則將導(dǎo)致結(jié)果準(zhǔn)確度下降。STM32 將 ADC 的轉(zhuǎn)換分為 2個通道組:規(guī)則通道組和注入通道組。規(guī)則通道相 當(dāng)于你正常運(yùn)行的程序,而注入通道呢,就相當(dāng)于中斷。在你程序正常執(zhí)行的時候, 中斷是可以打斷你 的執(zhí)行的。同這個類似,注入通道的轉(zhuǎn)換可以打斷規(guī)則通道的轉(zhuǎn) 換, 在注入通道被轉(zhuǎn)換完成之 后,規(guī)則通道才得以繼續(xù)轉(zhuǎn)換。 通過一個形象的例 子可以說明:假如你在家里的院子內(nèi)放了 5 個溫度探頭,室內(nèi)放了 3 個溫度探頭; 你需要時刻監(jiān)視室外溫度即可,但偶爾你想看看室內(nèi)的溫度;因此你可以使用規(guī)則 通道組循環(huán)掃描室外的 5 個探頭并顯示 AD 轉(zhuǎn)換結(jié)果,當(dāng)你想看室內(nèi)溫度時,通過 一個按鈕啟 動注入轉(zhuǎn)

23、換組 (3 個室內(nèi)探頭 ) 并暫時顯示室內(nèi)溫度,當(dāng)你放開這個按鈕 后,系統(tǒng)又會回到規(guī)則通 道組繼續(xù)檢測室外溫度。從系統(tǒng)設(shè)計上,測量并顯示室內(nèi) 溫度的過程中斷了測量并顯示室外溫度的過程,但程序設(shè)計上可以在初始化階段分 別設(shè)置好不同的轉(zhuǎn)換組,系統(tǒng)運(yùn)行中不必再變更 循環(huán)轉(zhuǎn)換的配置,從而達(dá)到兩個任 務(wù)互不干擾和快速切換的結(jié)果??梢栽O(shè)想一下,如果沒有規(guī)則組和注入組的劃分, 當(dāng)你按下按鈕后,需要從新配置 AD 循環(huán)掃描的通道,然后在釋放按鈕 后需再次配 置 AD 循環(huán)掃描的通道。 上面的例子因為速度較慢,不能完全體現(xiàn)這樣區(qū)分( 規(guī)則通道組和注入通道組 ) 的好處,但 在工業(yè)應(yīng)用領(lǐng)域中有很多檢測和監(jiān)視探頭需

24、要較 快地處理,這樣對 AD 轉(zhuǎn)換的分組將簡化事件 處理的程序并提高事件處理的速度。 STM32 其 ADC 的規(guī)則通道組最多包含 16 個轉(zhuǎn)換,而注入通道組最多包含 4個通道。 關(guān)于這兩個通道組的詳細(xì)介紹,請參考STM32中文參考手冊 _V10的第 155 頁,第 11 章。 STM32 的 ADC 可以進(jìn)行很多種不同的轉(zhuǎn)換模式, 這些模式在 STM32中 文參考手冊 _V10的第 11 章也都有詳細(xì)介紹,我們這里就不在一一列舉了。我們本 章僅介紹如何使用規(guī)則通道的單次轉(zhuǎn) 換模式。 STM32 的 ADC 在單次轉(zhuǎn)換模式下, 只執(zhí)行一次轉(zhuǎn)換,該模式可以通過 ADC_CR2 寄存器 的 ADO

25、N 位(只適用于規(guī)則通 道)啟動,也可以通過外部觸發(fā)啟動(適用于規(guī)則通道和注入通道) ,這是 CONT 位 為 0 。 以規(guī)則通道為例, 一旦所選擇的通道轉(zhuǎn)換完成, 轉(zhuǎn)換結(jié)果將被存在 ADC_DR 寄 存器中, EOC(轉(zhuǎn)換結(jié)束)標(biāo)志將被置位,如果設(shè)置了EOCIE,則會產(chǎn)生中斷。然后 ADC 將停止,直到下次啟動。2.2 ADC主要特征12 位分辨率轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時產(chǎn)生中斷 單次和連續(xù)轉(zhuǎn)換模式 從通道 0 到通道 n 的自動掃描模式 自校準(zhǔn) 帶內(nèi)嵌數(shù)據(jù)一致性的數(shù)據(jù)對齊 采樣間隔可以按通道分別編程 規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項 間斷模式 雙重模式 (帶 2個或以上 ADC的器件) ADC轉(zhuǎn)換時間: STM32F103xx 增強(qiáng)型產(chǎn)品:時鐘為 56MHz時為 1 s( 時鐘為 72MHz為 1.17 s) STM32F101xx 基本型產(chǎn)品:時鐘為 28MHz時為 1 s( 時鐘為 36MHz為 1.55 s) STM32F102xxUSB型產(chǎn)品:時鐘為 48MHz時為 1.2 s STM32F105xx 和 STM32F107xx產(chǎn)品:時鐘為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論