嵌入式系統(tǒng)原理及應(yīng)用項(xiàng)目化教程 課件 (陳群英)項(xiàng)目5、6 呼吸燈控制設(shè)計(jì)與實(shí)現(xiàn)、串行通信設(shè)計(jì)與實(shí)現(xiàn)_第1頁
嵌入式系統(tǒng)原理及應(yīng)用項(xiàng)目化教程 課件 (陳群英)項(xiàng)目5、6 呼吸燈控制設(shè)計(jì)與實(shí)現(xiàn)、串行通信設(shè)計(jì)與實(shí)現(xiàn)_第2頁
嵌入式系統(tǒng)原理及應(yīng)用項(xiàng)目化教程 課件 (陳群英)項(xiàng)目5、6 呼吸燈控制設(shè)計(jì)與實(shí)現(xiàn)、串行通信設(shè)計(jì)與實(shí)現(xiàn)_第3頁
嵌入式系統(tǒng)原理及應(yīng)用項(xiàng)目化教程 課件 (陳群英)項(xiàng)目5、6 呼吸燈控制設(shè)計(jì)與實(shí)現(xiàn)、串行通信設(shè)計(jì)與實(shí)現(xiàn)_第4頁
嵌入式系統(tǒng)原理及應(yīng)用項(xiàng)目化教程 課件 (陳群英)項(xiàng)目5、6 呼吸燈控制設(shè)計(jì)與實(shí)現(xiàn)、串行通信設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

嵌入式系統(tǒng)原理及應(yīng)用

項(xiàng)目化教程項(xiàng)目5呼吸燈控制設(shè)計(jì)與實(shí)現(xiàn)學(xué)習(xí)目標(biāo)1.掌握STM32通用定時(shí)器的原理及軟件配置;2.掌握STM32通用定時(shí)器中斷及軟件配置;3.掌握STM32PWM的原理;4.利用定時(shí)器實(shí)現(xiàn)PWM呼吸燈。目錄5.1定時(shí)器介紹5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制5.1定時(shí)器介紹通用定時(shí)器的內(nèi)部結(jié)構(gòu)框圖5.1定時(shí)器介紹5.1定時(shí)器介紹5.1定時(shí)器介紹5.1定時(shí)器介紹5.1定時(shí)器介紹5.1定時(shí)器介紹5.1定時(shí)器介紹定時(shí)器中斷實(shí)驗(yàn)APB1時(shí)鐘X1/X2F(CK_PSC)

÷NCK_CNT內(nèi)部時(shí)鐘選擇5.1定時(shí)器介紹定時(shí)器中斷實(shí)驗(yàn)時(shí)鐘計(jì)算方法:5.1定時(shí)器介紹定時(shí)器中斷實(shí)驗(yàn)通用定時(shí)器可以向上計(jì)數(shù)、向下計(jì)數(shù)、向上向下雙向計(jì)數(shù)模式。①向上計(jì)數(shù)模式:計(jì)數(shù)器從0計(jì)數(shù)到自動(dòng)加載值(TIMx_ARR),然后重新從0開始計(jì)數(shù)并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件。②向下計(jì)數(shù)模式:計(jì)數(shù)器從自動(dòng)裝入的值(TIMx_ARR)開始向下計(jì)數(shù)到0,然后從自動(dòng)裝入的值重新開始,并產(chǎn)生一個(gè)計(jì)數(shù)器向下溢出事件。③中央對齊模式(向上/向下計(jì)數(shù)):計(jì)數(shù)器從0開始計(jì)數(shù)到自動(dòng)裝入的值-1,產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件,然后向下計(jì)數(shù)到1并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件;然后再從0開始重新計(jì)數(shù)。計(jì)數(shù)器模式5.1定時(shí)器介紹向下計(jì)數(shù)模式(時(shí)鐘分頻因子=1)5.1定時(shí)器介紹向上計(jì)數(shù)模式(時(shí)鐘分頻因子=1)5.1定時(shí)器介紹中央對齊計(jì)數(shù)模式(時(shí)鐘分頻因子=1ARR=6)5.1定時(shí)器介紹計(jì)數(shù)器當(dāng)前值寄存器CNT5.1定時(shí)器介紹預(yù)分頻寄存器TIMx_PSC5.1定時(shí)器介紹自動(dòng)重裝載寄存器(TIMx_ARR)5.1定時(shí)器介紹控制寄存器1(TIMx_CR1)5.1定時(shí)器介紹DMA中斷使能寄存器(TIMx_DIER)5.1定時(shí)器介紹常用庫函數(shù)voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct);定時(shí)器參數(shù)初始化:voidTIM_Cmd(TIM_TypeDef*TIMx,FunctionalStateNewState)定時(shí)器使能函數(shù):定時(shí)器中斷使能函數(shù):voidTIM_ITConfig(TIM_TypeDef*TIMx,uint16_tTIM_IT,FunctionalStateNewState);5.1定時(shí)器介紹狀態(tài)標(biāo)志位獲取和清除FlagStatusTIM_GetFlagStatus(TIM_TypeDef*TIMx,uint16_tTIM_FLAG);voidTIM_ClearFlag(TIM_TypeDef*TIMx,uint16_tTIM_FLAG);ITStatusTIM_GetITStatus(TIM_TypeDef*TIMx,uint16_tTIM_IT);voidTIM_ClearITPendingBit(TIM_TypeDef*TIMx,uint16_tTIM_IT);5.1定時(shí)器介紹定時(shí)器中斷實(shí)現(xiàn)步驟能定時(shí)器時(shí)鐘。RCC_APB1PeriphClockCmd();②

初始化定時(shí)器,配置ARR,PSC。

TIM_TimeBaseInit();開啟定時(shí)器中斷,配置NVIC。

voidTIM_ITConfig();

NVIC_Init();④

使能定時(shí)器。

TIM_Cmd();⑥

編寫中斷服務(wù)函數(shù)。

TIMx_IRQHandler();5.1定時(shí)器介紹TIM2初始化函數(shù)voidTIM2_Init(u16per,u16psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2時(shí)鐘TIM_TimeBaseInitStructure.TIM_Period=per;//自動(dòng)裝載值TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//分頻系數(shù)TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//設(shè)置向上計(jì)數(shù)模式TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//開啟定時(shí)器中斷TIM_ClearITPendingBit(TIM2,TIM_IT_Update);NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;//定時(shí)器中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//搶占優(yōu)先級(jí)NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//子優(yōu)先級(jí)NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM4,ENABLE);//使能定時(shí)器}5.1定時(shí)器介紹TIM2中斷函數(shù)voidTIM2_IRQHandler(void){if(TIM_GetITStatus(TIM2,TIM_IT_Update)){led1=!led1;}TIM_ClearITPendingBit(TIM2,TIM_IT_Update); }5.1定時(shí)器介紹主函數(shù)#include"system.h"#include"SysTick.h"#include"led.h"#include"time.h"intmain(){u8i;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷優(yōu)先級(jí)分組,分2組LED_Init();TIM2_Init(1000,36000-1);//定時(shí)500mswhile(1){i++;if(i%20==0){led0=!led0;}delay_ms(10);}}

通過TIM2的更新中斷控制LED1指示燈間隔500ms秒狀態(tài)取反,主函數(shù)控制LED0指示燈不斷閃爍。5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制

脈沖寬度調(diào)制PWM(PulseWidthModulation)是利用微處理器的數(shù)字輸出來對模擬電路進(jìn)行控制的一種技術(shù)手段。就是調(diào)節(jié)一個(gè)周期中高電平所占的百分比,也就是調(diào)節(jié)占空比。比如可以通過調(diào)節(jié)占空比來控制直流電機(jī)的通電時(shí)間,以達(dá)到調(diào)速的目的,或通過調(diào)節(jié)占空比控制加熱時(shí)間,進(jìn)行溫度控制等。5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制STM32PWM工作過程5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制STM32PWM工作過程5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制STM32PWM工作過程(通道1為例)CCR1:捕獲比較(值)寄存器(x=1,2,3,4):設(shè)置比較值。CCMR1:OC1M[2:0]位:

對于PWM方式下,用于設(shè)置PWM模式1【110】或者PWM模式2【111】CCER:CC1P位:輸入/捕獲1輸出極性。0:高電平有效,1:低電平有效。CCER:CC1E位:輸入/捕獲1輸出使能。0:關(guān)閉,1:打開。5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制PWM模式1&PWM模式25.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制voidTIM_OC2PreloadConfig(TIM_TypeDef*TIMx,uint16_tTIM_OCPreload);voidTIM_ARRPreloadConfig(TIM_TypeDef*TIMx,FunctionalStateNewState);5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制自動(dòng)重載的預(yù)裝載寄存器voidTIM_ARRPreloadConfig(TIM_TypeDef*TIMx,FunctionalStateNewState);簡單的說,ARPE=1,ARR立即生效APRE=0,ARR下個(gè)比較周期生效。5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制STM32定時(shí)器3輸出通道引腳5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制PWM輸出配置步驟

使能定時(shí)器3和相關(guān)IO口時(shí)鐘。

使能定時(shí)器3時(shí)鐘:RCC_APB1PeriphClockCmd();

使能GPIOB時(shí)鐘:RCC_APB2PeriphClockCmd();②

初始化IO口為復(fù)用功能輸出。函數(shù):GPIO_Init();

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

這里我們是要把PB5用作定時(shí)器的PWM輸出引腳,所以要重映射配置,

所以需要開啟AFIO時(shí)鐘。同時(shí)設(shè)置重映射。RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);④

初始化定時(shí)器:ARR,PSC等:TIM_TimeBaseInit();⑤

初始化輸出比較參數(shù):TIM_OC2Init();⑥

使能預(yù)裝載寄存器:TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);⑦

使能定時(shí)器。TIM_Cmd();⑧

不斷改變比較值CCRx,達(dá)到不同的占空比效果:TIM_SetCompare2();5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制TIM3通道3的PWM初始化代碼voidTIM3_CH1_PWM_Init(u16per,u16psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;TIM_OCInitTypeDefTIM_OCInitStructure;GPIO_InitTypeDefGPIO_InitStructure;/*開啟時(shí)鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/*配置GPIO模式和IO口*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用推挽輸出GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改變指定管腳的映射TIM_TimeBaseInitStructure.TIM_Period=per;//自動(dòng)裝載值TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//分頻系數(shù)TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//設(shè)置向上計(jì)數(shù)模式TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OC1Init(TIM3,&TIM_OCInitStructure);//輸出比較通道3初始化TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能TIMx在CCR1上的預(yù)裝載寄存器TIM_ARRPreloadConfig(TIM3,ENABLE);//使能預(yù)裝載寄存器TIM_Cmd(TIM3,ENABLE);//使能定時(shí)器}

硬件電路只使用到開發(fā)板上的LED0,連接在PB0管腳。要實(shí)現(xiàn)的功能是:通過TIM3的CH3輸出一個(gè)PWM信號(hào),控制LED0指示燈由暗變亮,再由亮變暗。5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制#include"system.h"#include"SysTick.h"#include"led.h"#include"pwm.h"intmain(){u16i=0;u8fx=0;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷優(yōu)先級(jí)分組,分2組LED_Init();TIM3_CH1_PWM_Init(500,72-1);//頻率是2Khwhile(1){if(fx==0){i++;if(i==300){fx=1;}}else{i--;if(i==0){fx=0;}}TIM_SetCompare1(TIM3,i);//i值最大可以取499,因?yàn)锳RR最大是499.delay_ms(10); }}主函數(shù)首先初始化對應(yīng)的硬件端口時(shí)鐘和IO口,然后調(diào)TIM3_CH3_PWM_Init函數(shù),這里設(shè)定定時(shí)器自動(dòng)重裝載值為500,預(yù)分頻系數(shù)為72-1,定時(shí)周期即為500us,頻率即為2KHz。初始化后,定時(shí)器開始工作,PB0開始輸出PWM波形,波形頻率為2KHz。通過變量fx控制i的方向,如果fx=0,i值累加,否則遞減,然后將這個(gè)變化的i值傳遞給TIM_SetCompare1函數(shù),該函數(shù)功能是改變占空比的,從而實(shí)現(xiàn)指示燈亮度的調(diào)節(jié),呈現(xiàn)呼吸燈的效果。程序中將i值控制在300內(nèi),主要是因?yàn)镻WM輸出波形占空比達(dá)到這個(gè)值時(shí),指示燈亮度變化就不明顯了,而且在初始化定時(shí)器時(shí),將自動(dòng)重裝載值設(shè)置為499,i值不能超過499。5.2任務(wù)9使用定時(shí)器實(shí)現(xiàn)PWM控制測試效果舉一反三(1)修改TIM2初始化函數(shù)參數(shù)值,設(shè)定1秒鐘的定時(shí)中斷,讓D2指示燈1秒鐘狀態(tài)反轉(zhuǎn)一次,實(shí)現(xiàn)2秒鐘閃爍一次。(2)使用TIM3的更新中斷控制D2指示燈閃爍,閃爍時(shí)間自定義。(溫馨提示:只需要在初始化函數(shù)和中斷函數(shù)中,將TIM2修改為TIM3即可)(3)使用TIM3的CH2通道輸出PWM控制蜂鳴器聲音大小。(溫馨提示:按照前面介紹的方法查找對應(yīng)通道復(fù)用映射關(guān)系即可,可以嘗試不同頻率的控制)嵌入式系統(tǒng)原理及應(yīng)用

項(xiàng)目化教程項(xiàng)目6串行通信設(shè)計(jì)與實(shí)現(xiàn)學(xué)習(xí)目標(biāo)1.了解串行通信的基本概念;2.掌握STM32F1的USART接口及配置;3.掌握printf重定向;4.利用STM32F1的USART1實(shí)現(xiàn)與PC機(jī)對話。目錄6.1串行通信6.2USART介紹6.3任務(wù)10USART1與PC機(jī)實(shí)現(xiàn)對話6.4任務(wù)11printf重定向至串口1.通信接口背景知識(shí)

處理器與外部設(shè)備通信的兩種方式:并行通信-傳輸原理:數(shù)據(jù)各個(gè)位同時(shí)傳輸。-優(yōu)點(diǎn):速度快-缺點(diǎn):占用引腳資源多串行通信-傳輸原理:數(shù)據(jù)按位順序傳輸。-優(yōu)點(diǎn):占用引腳資源少-缺點(diǎn):速度相對較慢6.1串行通信1.通信接口背景知識(shí)

串行通信:按照數(shù)據(jù)傳送方向,分為:單工:

數(shù)據(jù)傳輸只支持?jǐn)?shù)據(jù)在一個(gè)方向上傳輸半雙工:

允許數(shù)據(jù)在兩個(gè)方向上傳輸,但是,在某一時(shí)刻,只允許數(shù)

據(jù)在一個(gè)方向上傳輸,它實(shí)際上是一種切換方向的單工通信;全雙工:允許數(shù)據(jù)同時(shí)在兩個(gè)方向上傳輸,因此,全雙工通信是兩個(gè)

單工通信方式的結(jié)合,它要求發(fā)送設(shè)備和接收設(shè)備都有獨(dú)立

的接收和發(fā)送能力。6.1串行通信1.通信接口背景知識(shí)

串行通信三種傳送方式:6.1串行通信1.通信接口背景知識(shí)

串行通信的通信方式同步通信:帶時(shí)鐘同步信號(hào)傳輸。-SPI,IIC通信接口異步通信:不帶時(shí)鐘同步信號(hào)。-UART(通用異步收發(fā)器),單總線6.1串行通信1.通信接口背景知識(shí)

常見的串行通信接口:通信標(biāo)準(zhǔn)引腳說明通信方式通信方向UART(通用異步收發(fā)器)TXD:發(fā)送端RXD:接受端GND:公共地異步通信全雙工單總線(1-wire)DQ:發(fā)送/接受端異步通信半雙工SPISCK:同步時(shí)鐘MISO:主機(jī)輸入,從機(jī)輸出MOSI:主機(jī)輸出,從機(jī)輸入同步通信全雙工I2CSCL:同步時(shí)鐘SDA:數(shù)據(jù)輸入/輸出端同步通信半雙工6.1串行通信2.STM32串口通信基礎(chǔ)

STM32的串口通信接口UART:通用異步收發(fā)器USART:通用同步異步收發(fā)器大容量STM32F10x系列芯片,包含3個(gè)USART和2個(gè)UART6.1串行通信2.STM32串口通信基礎(chǔ)

UART異步通信方式引腳連接方法:-RXD:數(shù)據(jù)輸入引腳。數(shù)據(jù)接受。-TXD:數(shù)據(jù)發(fā)送引腳。數(shù)據(jù)發(fā)送。6.1串行通信2.STM32串口通信基礎(chǔ)

UART異步通信方式引腳:-RXD:數(shù)據(jù)輸入引腳。數(shù)據(jù)接受。-TXD:數(shù)據(jù)發(fā)送引腳。數(shù)據(jù)發(fā)送。串口號(hào)RXDTXD1PA10PA92PA3PA23PB11PB104PC11PC105PD2PC126.1串行通信2.STM32串口通信基礎(chǔ)

UART異步通信方式特點(diǎn):全雙工異步通信。分?jǐn)?shù)波特率發(fā)生器系統(tǒng),提供精確的波特率。-發(fā)送和接受共用的可編程波特率,最高可達(dá)4.5Mbits/s可編程的數(shù)據(jù)字長度(8位或者9位);可配置的停止位(支持1或者2位停止位);可配置的使用DMA多緩沖器通信。單獨(dú)的發(fā)送器和接收器使能位。檢測標(biāo)志:①

接受緩沖器②發(fā)送緩沖器空③傳輸結(jié)束標(biāo)志多個(gè)帶標(biāo)志的中斷源。觸發(fā)中斷。其他:校驗(yàn)控制,四個(gè)錯(cuò)誤檢測標(biāo)志。6.1串行通信2.STM32串口通信基礎(chǔ)

串口通信過程數(shù)據(jù)接收過程:MCU內(nèi)核輸入數(shù)據(jù)緩沖器串行輸入移位寄存器MCU內(nèi)核輸出數(shù)據(jù)緩沖器串行輸出移位寄存器數(shù)據(jù)發(fā)送過程:RXDTXD串行數(shù)據(jù)輸入串行數(shù)據(jù)輸出外部設(shè)備外部設(shè)備……6.1串行通信

STM32串口異步通信需要定義的參

溫馨提示

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

最新文檔

評論

0/150

提交評論