《 物聯(lián)網(wǎng)集成系統(tǒng)設(shè)計 》 課件 3串口節(jié)點部分_第1頁
《 物聯(lián)網(wǎng)集成系統(tǒng)設(shè)計 》 課件 3串口節(jié)點部分_第2頁
《 物聯(lián)網(wǎng)集成系統(tǒng)設(shè)計 》 課件 3串口節(jié)點部分_第3頁
《 物聯(lián)網(wǎng)集成系統(tǒng)設(shè)計 》 課件 3串口節(jié)點部分_第4頁
《 物聯(lián)網(wǎng)集成系統(tǒng)設(shè)計 》 課件 3串口節(jié)點部分_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

物聯(lián)網(wǎng)應(yīng)用系統(tǒng)設(shè)計智能家居項目單片機LED應(yīng)用服務(wù)程序網(wǎng)關(guān)程序運程控制LED燈的項目智能家居項目1主動上傳燈的狀態(tài)2被動上傳燈的狀態(tài)

3接收命令控制燈的狀態(tài)教學目標串口節(jié)點的實現(xiàn)難點主動上傳被動上傳的概念主動上傳燈的狀態(tài)重點程序?qū)崿F(xiàn)添加標題串口節(jié)點的連接基于串口節(jié)點網(wǎng)關(guān)服務(wù)器RS232/485網(wǎng)線主動上傳

節(jié)點數(shù)據(jù)主動上傳方式是,不需要網(wǎng)關(guān)向節(jié)點發(fā)送上傳采集數(shù)據(jù)命令的情況下,節(jié)點主動的向網(wǎng)關(guān)發(fā)送節(jié)點數(shù)據(jù),也就是節(jié)點數(shù)據(jù)定時(某一時間特定的間隔)上傳,或在一定的條件下主動把采集到的數(shù)據(jù)發(fā)送到網(wǎng)關(guān)。在本例上,節(jié)點單片機把采集到的LED燈的狀態(tài)信息以定時的方式主動上傳到網(wǎng)關(guān)。添加標題主動上傳上層定時上傳被動上傳

節(jié)點數(shù)據(jù)被動上傳方式是節(jié)點不會自發(fā)向網(wǎng)關(guān)發(fā)送采集到的數(shù)據(jù),而是網(wǎng)關(guān)首先發(fā)送采集命令給節(jié)點,當節(jié)點收到網(wǎng)關(guān)發(fā)來的采集命令信息時,節(jié)點才把采集到的數(shù)據(jù)發(fā)送到網(wǎng)關(guān)。在本例中,節(jié)點單片機接收到網(wǎng)關(guān)的采集命令后,通過引腳讀取LED燈的狀態(tài),再把LED燈的狀態(tài)信息發(fā)送給網(wǎng)關(guān)。添加標題主動上傳上層接收到上傳命令再上傳①②系統(tǒng)集成總體架構(gòu)添加標題添加標題添加標題添加標題LED燈硬件連接系統(tǒng)集成總體架構(gòu)添加標題添加標題添加標題添加標題單片機軟件1引腳讀寫2時鐘定時3串口發(fā)送voidLED_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//使能GPIOF時鐘//GPIOF9初始化設(shè)置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//LED0對應(yīng)IO口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//普通輸出模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉GPIO_Init(GPIOF,&GPIO_InitStructure);//初始化GPIOGPIO_SetBits(GPIOF,GPIO_Pin_9);//GPIOF9設(shè)置高,燈滅}引腳初始化設(shè)置GPIOF_9引腳高電平GPIO_SetBits(GPIOF,GPIO_Pin_9);設(shè)置多個引腳高電平GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);

引腳設(shè)高電平led燈滅設(shè)置GPIOF_9引腳低電平GPIO_ResetBits(GPIOF,GPIO_Pin_9);設(shè)置多個引腳低電平GPIO_ResetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);

引腳設(shè)置低電平led燈亮讀取引腳GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_9);#defineREADLED0GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_10)#defineREADLED0PFin(9)定時初始化(1)voidTIM3_Int_Init(u16arr,u16psc){ TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure; NVIC_InitTypeDefNVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能TIM3時鐘

TIM_TimeBaseInitStructure.TIM_Period=arr; //自動裝載值 TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//定時器分頻 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上計數(shù) TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化定時器TIM3 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//允許定時器TIM3更新中斷 TIM_Cmd(TIM3,ENABLE);//使能定時器3

定時初始化(2)

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;//定時器3中斷 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;//搶占優(yōu)先級1 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;//響應(yīng)優(yōu)先級3 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);//初始化NVIC

}定時的使用voidTIM3_IRQHandler(void){ if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)//判斷是否溢出中斷 { //中斷處理函數(shù)要處理的代碼******* } TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中斷標志位}定時的使用voidTIM3_IRQHandler(void){ if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)//判斷是否溢出中斷 {

TIM3_Int_Init(5000-1,8400-1); } TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中斷標志位}定時器3時鐘是在APB1時鐘線上,根據(jù)程序相關(guān)設(shè)置,定時器時鐘為84Mhz,現(xiàn)設(shè)置分頻系數(shù)8400,所以84MHz/8400=10kHz的計數(shù)頻率,計數(shù)5000次為500ms,也就是說0.5秒發(fā)生一次定時中斷。串口初始化(1)voiduart_init(u32bound){GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1時鐘GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA9,復(fù)用為USART1GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//GPIOA10,復(fù)用為USART1 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用功能GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度50MHzGPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽復(fù)用輸出 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA9,PA10串口初始化(2)USART_InitStructure.USART_BaudRate=bound;//波特率USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字長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|USART_Mode_Tx;//收發(fā)模式USART_Init(USART1,&USART_InitStructure);//初始化串口USART1USART_Cmd(USART1,ENABLE);//使能串口USART1USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//開啟相關(guān)中斷NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//串口USART1中斷1中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//搶占優(yōu)先級3NVIC_InitStructure.NVIC_IRQChannelSubPriority=3; //子優(yōu)先級3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //通道使能NVIC_Init(&NVIC_InitStructure); //初始化VIC

}串口發(fā)送USART_SendData(USART1,USART_RX_BUF[t]);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發(fā)送結(jié)束例:USART_SendData(USART1,(u8)'0');while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發(fā)送結(jié)束串口接收while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET) { i=USART_ReceiveData(USART1);

}

主動上傳燈的狀態(tài)01主動上傳voidTIM3_IRQHandler(void){if(TIM_GetITStatus(TIM3,Tim_IT_Update)==SET)//溢出中斷{i=GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_10);if(i==0x1)USART_SendData(USART1,(u8)'0');elseUSART_SendData(USART1,(u8)'1');//向串口USART1發(fā)送數(shù)據(jù)while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發(fā)送結(jié)束}TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中斷標志位}

本例程采用主動上傳方式發(fā)送燈的狀態(tài)信息,所以定時中斷處理函數(shù)中采用以下代碼,每次定時器0.5秒時間到時,通過串口USART1發(fā)送數(shù)據(jù)。被動上傳燈的狀態(tài)02被動上傳voidUSART1_IRQHandler(void)//串口USART1中斷服務(wù)程序{

u8i,j;

if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)

{

i=USART_ReceiveData(USART1);

if(i=='2')

{

j=GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_10);

if(j==0x0)USART_SendData(USART1,(u8)'1');

elseUSART_SendData(USART1,(u8)'0');

while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);}}}

在代碼中,先是判斷接收到的串口信息是否為2。如果接收到2,則發(fā)送LEDI燈的狀態(tài)信息。通過讀取LED!的引腳,查看燈的狀態(tài),如果燈的狀態(tài)為0時,燈是亮的,則發(fā)送1,否則發(fā)送0??刂茻舻臓顟B(tài)03控制LED燈voidUSART1_IRQHandler(void)//串口USART1中斷服務(wù)程序{

u8i,j;

i=USART_ReceiveData(USART1);

if(i=='1')

{

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論