




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 嵌入式系統(tǒng)課程設(shè)計(jì) 姓名: 班級(jí): 學(xué)號(hào): 專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)目錄:1 系統(tǒng)要求2 設(shè)計(jì)方案三程序流程圖四軟件設(shè)計(jì)五課程總結(jié)與個(gè)人體會(huì)一、系統(tǒng)要求 使用STM32F103作為主控CPU設(shè)計(jì)一個(gè)溫度綜合測(cè)控系統(tǒng),具體要求: 1、使用熱敏電阻或者內(nèi)部集成的溫度傳感器檢測(cè)環(huán)境溫度,每0.1秒檢測(cè)一次溫度,對(duì)檢測(cè)到的溫度進(jìn)行數(shù)字濾波(可以使用平均法)。記錄當(dāng)前的溫度值和時(shí)間。 2、使用計(jì)算機(jī),通過(guò)串行通信獲取STM32F103檢測(cè)到的溫度和所對(duì)應(yīng)的時(shí)間。 3、使用計(jì)算機(jī)進(jìn)行時(shí)間的設(shè)定。 4、使用計(jì)算機(jī)進(jìn)行溫度上限值和下限值的設(shè)定。 5、若超過(guò)上限值或者低于下限值,則STM32
2、進(jìn)行報(bào)警提示。2、 設(shè)計(jì)方案本次課程設(shè)計(jì)的要求是使用STM32F103設(shè)計(jì)一個(gè)溫度測(cè)控系統(tǒng),這款單片機(jī)集成了很多的片上資源,功能十分強(qiáng)大,我使用了以下部分來(lái)完成課程設(shè)計(jì)的要求:1、 STM32F103內(nèi)置了3個(gè)12位A/D轉(zhuǎn)換模塊,最快轉(zhuǎn)換時(shí)間為1us。本次課程設(shè)計(jì)要求進(jìn)行溫度測(cè)定,于是使用了其中一個(gè)ADC對(duì)片上溫度傳感器的內(nèi)部信號(hào)源進(jìn)行轉(zhuǎn)換。當(dāng)有多個(gè)通道需要采集信號(hào)時(shí),可以把ADC配置為按一定的順序來(lái)對(duì)各個(gè)通道進(jìn)行掃描轉(zhuǎn)換,本設(shè)計(jì)只采集一個(gè)通道的信號(hào),所以不使用掃描轉(zhuǎn)換模式。 本設(shè)計(jì)需要循環(huán)采集電壓值,所以使用連續(xù)轉(zhuǎn)換模式。 2、 本次課程設(shè)計(jì)還使用到了DMA。DMA是一種高速的數(shù)據(jù)傳輸操作
3、,允許在外部設(shè)備和儲(chǔ)存器之間利用系統(tǒng)總線直接讀寫(xiě)數(shù)據(jù),不需要微處理器干預(yù)。使能ADC的DMA接口后,DMA控制器把轉(zhuǎn)換值從ADC數(shù)據(jù)寄存器(ADC_DR)中轉(zhuǎn)移到變量ADC_ConvertedValue中,當(dāng)DMA傳輸完成后,在main函數(shù)中使用的ADC_ConvertedValue的內(nèi)容就是ADC轉(zhuǎn)換值了。 3、 STM32內(nèi)部的溫度傳感器和ADCx_IN16輸入通道相連接,此通道把傳感器輸出的電壓值轉(zhuǎn)換成數(shù)字值。STM內(nèi)部的溫度傳感器支持的溫度范圍:-40到125攝氏度。利用下列公式得出溫度 溫度(°C) = (V25 - VSENSE) / Avg_Slope + 25 式中V
4、25是 VSENSE在25攝氏度時(shí)的數(shù)值(典型值為1.42V) Avg_Slope是溫度與VSENSE曲線的平均斜率(典型值為4.3mV/C) 利用均值法對(duì)轉(zhuǎn)換后的溫度進(jìn)行濾波,將得到的溫度通過(guò)串口輸出。4、 本設(shè)計(jì)采用了USART1作為串行通信接口,來(lái)進(jìn)行時(shí)間、溫度的傳輸,以及進(jìn)行時(shí)間和溫度上下限的設(shè)定。5、 當(dāng)溫度超過(guò)上下限時(shí),開(kāi)發(fā)板上的燈會(huì)相應(yīng)亮起作為警報(bào),使用了GPIO配置引腳。6、 時(shí)間計(jì)時(shí)使用了systick時(shí)鐘,并配置其中斷,由此進(jìn)行一秒定時(shí),實(shí)現(xiàn)時(shí)鐘的實(shí)時(shí)顯示。7、 時(shí)間設(shè)定部分參考了一個(gè)兩位數(shù)字讀取的函數(shù),在進(jìn)入主循環(huán)前設(shè)定參數(shù),從而避免了在串口中斷中輸入只能一次性輸入所有參
5、數(shù)的弊端。3、 程序流程圖開(kāi)始各模塊初始化設(shè)定溫度顯示當(dāng)前時(shí)間溫度計(jì)時(shí)一秒是對(duì)應(yīng)警告燈亮判斷當(dāng)前溫度是否超過(guò)設(shè)定范圍否警告燈全滅4、 軟件設(shè)計(jì)用到的庫(kù)文件:stm32f10x_adc.h,stm32f10x_dma.h,stm32f10x_flash.h,stm32f10x_gpio.h,stm32f10x_rcc.h,stm32f10x_usart.h,misc.h自己編寫(xiě)的文件:main.c,stm32f10x_it.c,stm32f10x_it.hmain文件:#include "stm32f10x.h"#include "stdarg.h"#in
6、clude "stdio.h"#define ADC1_DR_Address (uint32_t)0xC)extern _IO u16 ADC_ConvertedValue;extern _IO u16 calculated_temp;_IO u16 Current_Temp;unsigned char sec=0,min=0,hour=0;typedef struct int tm_sec; int tm_min; int tm_hour;rtc_time;rtc_time systmtime;_IO u16 upper_bound;_IO u16 lower_bound
7、;/static uint8_t USART_Scanf(uint32_t value);void Time_Regulate(rtc_time *tm);unsigned int TimingDelay=0;unsigned int KEY_ON;unsigned int KEY_OFF;void Delay(u32 count)u32 i=0;for(;i<count;i+);void LED_GPIO_Config()GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, EN
8、ABLE); / 使能PD端口時(shí)鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11; /LED0->PD.8端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /IO 速度 50MHzGPIO_Init(GPIOD, &GPIO_InitStructure); /根據(jù)設(shè)定參數(shù)初始化 GPIOB.5void SysTic
9、k_Init()if (SysTick_Config(SystemCoreClock / 1000)while(1);SysTick->CTRL &= SysTick_CTRL_ENABLE_Msk;/關(guān)閉滴答定時(shí)器/SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;/開(kāi)啟滴答定時(shí)器void Delay_ms(_IO u32 nTime)TimingDelay=nTime;SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;/打開(kāi)while(TimingDelay != 0);void RCC_Config
10、(void)/配置時(shí)鐘RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);/DMARCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);/ADC1 and GPIOCRCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);/USARTRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); / 使能PD端口
11、時(shí)鐘 LEDvoid GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;/*Config PA.01 (ADC1)*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOC, &GPIO_InitStructure);/*Config LED */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽輸出GPIO_InitStructu
12、re.GPIO_Speed = GPIO_Speed_50MHz; /IO 速度 50MHzGPIO_Init(GPIOD, &GPIO_InitStructure); /根據(jù)設(shè)定參數(shù)初始化 GPIOB.5/*Config USART */* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_
13、Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);void DMA_Config(void)/* DMA channel1 configur
14、ation */DMA_InitTypeDef DMA_InitStructure;DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; /*ADC?*/DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize = 16;DMA_Init
15、Structure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode = DMA_Mode_Circular
16、;DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel1, &DMA_InitStructure);/* Enable DMA channel1 */ DMA_Cmd(DMA1_Channel1, ENABLE);void ADC1_Config(void) ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Inde
17、pendent;ADC_InitStructure.ADC_ScanConvMode = ENABLE ;ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel = 1;ADC_Init(ADC1, &ADC_InitStructure
18、);/* ADC1 regular channel16 configuration */ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);ADC_TempSensorVrefintCmd(ENABLE);ADC_DMACmd(ADC1, ENABLE);ADC_Cmd(ADC1, ENABLE);ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1);ADC_StartCalibration(ADC1);whil
19、e(ADC_GetCalibrationStatus(ADC1);ADC_SoftwareStartConvCmd(ADC1, ENABLE);void USART1_Config(void)USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = 9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitS
20、tructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);/ USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);/接收使能/ USART_ITConfig(USAR
21、T1,USART_IT_TXE,ENABLE);/發(fā)送使能USART_Cmd(USART1,ENABLE); /啟動(dòng)串口static uint8_t USART_Scanf(uint32_t value)/字符串讀取函數(shù) uint32_t index = 0; uint32_t tmp2 = 0, 0; while (index < 2) /* Loop until RXNE = 1 */while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) =RESET)tmpindex+ = (USART_ReceiveData(USART1);if
22、(tmpindex - 1 < 0x30) | (tmpindex -1 > 0x39) printf("nr請(qǐng)輸入有效數(shù)字 0 到 9 ->: ");index-; index = (tmp1 - 0x30) + (tmp0 - 0x30) * 10); /* Checks */ if (index > value) printf("nr請(qǐng)輸入有效數(shù)字 0 到 %d", value);return 0xFF; return index;void Time_Regulate(rtc_time *tm)/時(shí)間設(shè)定函數(shù) uint32_
23、t Tmp_HH =0xFF, Tmp_MI = 0xFF, Tmp_SS = 0xFF; uint32_t Tmp_up = 0xff,Tmp_low = 0xff; printf("rn 設(shè)定溫度范圍"); printf("rn 輸入溫度上限: "); while (Tmp_up = 0xFF) Tmp_up = USART_Scanf(99); printf("nr 溫度上限為 %0.2d Cnr", Tmp_up);upper_bound = Tmp_up;/-printf("rn 輸入溫度下限: ");w
24、hile (Tmp_low = 0xFF)Tmp_low = USART_Scanf(99);printf("nr 溫度下限為 %0.2d Cnr", Tmp_low);lower_bound = Tmp_low;printf("rn 設(shè)定時(shí)間 "); Tmp_HH = 0xFF; printf("rn 設(shè)定小時(shí): "); while (Tmp_HH = 0xFF) Tmp_HH = USART_Scanf(23); printf("nr 設(shè)定小時(shí)為 %dnr", Tmp_HH ); tm->tm_hour=
25、 Tmp_HH; Tmp_MI = 0xFF; printf("rn 設(shè)定分鐘: "); while (Tmp_MI = 0xFF) Tmp_MI = USART_Scanf(59); printf("nr 設(shè)定分鐘為 %dnr", Tmp_MI); tm->tm_min= Tmp_MI; Tmp_SS = 0xFF; printf("rn 設(shè)定秒: "); while (Tmp_SS = 0xFF) Tmp_SS = USART_Scanf(59); printf("nr 設(shè)定秒為 %dnr", Tmp_S
26、S); tm->tm_sec= Tmp_SS;int fputc(int ch, FILE *f)/重定向函數(shù)USART_SendData(USART1, (unsigned char) ch);/ while (!(USART1->SR & USART_FLAG_TXE);while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);return (ch);/*主函數(shù)*/int main(void)#ifdef DEBUG#endifSysTick_Init();LED_GPIO_Config();RCC_Config()
27、;GPIO_Config();DMA_Config();ADC1_Config();USART1_Config();Delay(5000);Time_Regulate(&systmtime);GPIO_SetBits(GPIOD, GPIO_Pin_8);GPIO_SetBits(GPIOD, GPIO_Pin_9);GPIO_SetBits(GPIOD, GPIO_Pin_10);GPIO_SetBits(GPIOD, GPIO_Pin_11);sec=systmtime.tm_sec;min=systmtime.tm_min;hour=systmtime.tm_hour;while
28、(1) sec+;if(sec=60) sec=0;min+;if(min=60)min=0;hour+;if(hour=24)hour=0;printf("rn 當(dāng)前時(shí)間: %d :%d :%d rn", hour,min,sec);printf("rn 當(dāng)前溫度: %02d C 溫度上限:%02d C 溫度下限:%02d C rn",Average_Temp,upper_bound,lower_bound);GPIO_SetBits(GPIOD, GPIO_Pin_8);GPIO_SetBits(GPIOD, GPIO_Pin_9);GPIO_Set
29、Bits(GPIOD, GPIO_Pin_10);GPIO_SetBits(GPIOD, GPIO_Pin_11); if(int)Current_Temp) > (int)upper_bound)GPIO_ResetBits(GPIOD, GPIO_Pin_8);else if(int)Current_Temp) < (int)lower_bound)GPIO_ResetBits(GPIOD, GPIO_Pin_11);elseGPIO_SetBits(GPIOD, GPIO_Pin_8);GPIO_SetBits(GPIOD, GPIO_Pin_9);GPIO_SetBits(
30、GPIOD, GPIO_Pin_10);GPIO_SetBits(GPIOD, GPIO_Pin_11);Delay_ms(1000);stm32f10x_it.c文件:/* Includes -*/#include "stm32f10x_it.h"/* Private functions -*/void display(void)unsigned char ad_data,ad_value_max,ad_value_min;ad_data=Current_Temp;if(ad_sample_cnt=0)ad_value_max=ad_data;ad_value_min=a
31、d_data; else if(ad_data<ad_value_min)ad_value_min=ad_data;else if(ad_data>ad_value_max)ad_value_max=ad_data;ad_value_sum+=ad_data;ad_sample_cnt+;if(ad_sample_cnt=10)ad_value_sum-=ad_value_min;ad_value_sum-=ad_value_max;ad_value_sum/=8;calculated_temp=ad_value_sum;ad_sample_cnt=0;ad_value_min=0
32、;ad_value_max=0;void SysTick_Handler(void)TimingDelay-;ADC_tempValueLocal = ADC_ConvertedValue;/printf("n %02d n, ADC_ConvertedValue");Current_Temp=(V25-ADC_tempValueLocal)/Avg_Slope+25; temp_sum+=Current_Temp;temp_cnt+;if(temp_cnt>=10)temp_cnt=0;temp_sum/=10;Average_Temp=temp_sum;temp_
33、sum=0;/printf("rn The current temperature = %02d Crn", calculated_temp);5、 課程總結(jié)與個(gè)人體會(huì) 嵌入式開(kāi)發(fā)是自動(dòng)化專(zhuān)業(yè)的主要課程之一,現(xiàn)實(shí)生活中,嵌入式在應(yīng)用可以說(shuō)得是無(wú)處不在。因此在大學(xué)中掌握嵌入式的開(kāi)發(fā)技術(shù)是十分重要的,也是十分必要的。 本次使用基于Cortex-M3內(nèi)核的32位ARM處理器stm32作為主控制器,設(shè)計(jì)了一種溫度測(cè)控系統(tǒng)。系統(tǒng)中,使用了ADC、DMA、溫度傳感器、USART、GPIO、定時(shí)器、NVIC等資源,實(shí)踐了課上所學(xué)的內(nèi)容,深深體會(huì)到了應(yīng)用的重要性。在課程設(shè)計(jì)的過(guò)程中,為了減小干擾的影響,數(shù)據(jù)采
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【假期提升】 五升六語(yǔ)文暑假作業(yè)(四)-人教部編版(含答案含解析)
- 音樂(lè)角色測(cè)試試題及答案
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職公共科目能力檢測(cè)試卷A卷附答案
- 醫(yī)療服務(wù)基礎(chǔ)面試題及答案
- 配合老師教學(xué)的合同(2篇)
- 2025年度施工員資格考試全真模擬考試試題及答案(共三套)
- 健康衛(wèi)生知識(shí)培訓(xùn)課件
- 年度目標(biāo)達(dá)成工作計(jì)劃與目標(biāo)分解
- 私人導(dǎo)游旅游服務(wù)安全須知
- 成長(zhǎng)中的兒童文學(xué)經(jīng)典作品解讀
- 中學(xué)家長(zhǎng)學(xué)校工作方案(10篇)
- 高考地理二輪復(fù)習(xí)【知識(shí)精研】大氣運(yùn)動(dòng)規(guī)律-大氣受熱過(guò)程與氣溫
- 日內(nèi)交易策略(TBQ版)
- 【公開(kāi)課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級(jí)下冊(cè)+
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
- 特征選擇和提取特征提取
- 《民航貨物運(yùn)輸》課程標(biāo)準(zhǔn)
- 雙胎妊娠 PPT課件
- 脊髓壓迫癥A吳紹勇
- FMEA第五版表格(實(shí)例)
- 百斯巴特扒胎機(jī)MS63
評(píng)論
0/150
提交評(píng)論