ARM微控制器與嵌入式系統(tǒng) 課件 21 串口通信協(xié)議 -30 定時(shí)器輸出PWM編程要點(diǎn)_第1頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 21 串口通信協(xié)議 -30 定時(shí)器輸出PWM編程要點(diǎn)_第2頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 21 串口通信協(xié)議 -30 定時(shí)器輸出PWM編程要點(diǎn)_第3頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 21 串口通信協(xié)議 -30 定時(shí)器輸出PWM編程要點(diǎn)_第4頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 21 串口通信協(xié)議 -30 定時(shí)器輸出PWM編程要點(diǎn)_第5頁(yè)
已閱讀5頁(yè),還剩177頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

ARM微控制器與嵌入式系統(tǒng)

串口通信內(nèi)容串口通信協(xié)議:物理層和協(xié)議層物理層RS232標(biāo)準(zhǔn)串口通信USB轉(zhuǎn)串口通信串口到串口通信協(xié)議層串口通信協(xié)議串口通訊(SerialCommunication)是一種設(shè)備間非常常用的串行通訊方式,因?yàn)樗?jiǎn)單便捷,大部分電子設(shè)備都支持該通訊方式,電子工程師在調(diào)試設(shè)備時(shí)也經(jīng)常使用該通訊方式輸出調(diào)試信息。對(duì)于通訊協(xié)議,我們也以分層的方式來(lái)理解,最基本的是把它分為物理層和協(xié)議層。串口通信協(xié)議物理層:規(guī)定通訊系統(tǒng)中具有機(jī)械、電子功能部分的特性,確保原始數(shù)據(jù)在物理媒體的傳輸。其實(shí)就是硬件部分。協(xié)議層:協(xié)議層主要規(guī)定通訊邏輯,統(tǒng)一收發(fā)雙方的數(shù)據(jù)打包、解包標(biāo)準(zhǔn)。其實(shí)就是軟件部分。串口通信協(xié)議物理層標(biāo)準(zhǔn)RS232標(biāo)準(zhǔn)USB轉(zhuǎn)串口串口到串口RS232標(biāo)準(zhǔn)串口RS-232標(biāo)準(zhǔn)主要規(guī)定了:信號(hào)的用途通信接口信號(hào)的電平標(biāo)準(zhǔn)RS232標(biāo)準(zhǔn)串口RS232標(biāo)準(zhǔn)串口通信結(jié)構(gòu)圖RS232標(biāo)準(zhǔn)串口主要用于工業(yè)設(shè)備直接通信由于RS-232電平標(biāo)準(zhǔn)的信號(hào)不能直接被控制器直接識(shí)別,所以這些信號(hào)會(huì)經(jīng)過(guò)一個(gè)“電平轉(zhuǎn)換芯片”轉(zhuǎn)換成控制器能識(shí)別的“TTL校準(zhǔn)”的電平信號(hào),才能實(shí)現(xiàn)通信。RS232標(biāo)準(zhǔn)串口根據(jù)通信使用的電平標(biāo)準(zhǔn)不同,串口通信可分為T(mén)TL標(biāo)準(zhǔn)及RS-232標(biāo)準(zhǔn)。通信標(biāo)準(zhǔn)電平標(biāo)準(zhǔn)(發(fā)送端)5VTTL邏輯1:2.4V-5V邏輯0:0-0.5VRS-232邏輯1:-15V~-3V邏輯0:+3V~+15VRS232標(biāo)準(zhǔn)串口RS232標(biāo)準(zhǔn)串口通信結(jié)構(gòu)圖電平轉(zhuǎn)換芯片一般有MAX3232,SP3232RS232標(biāo)準(zhǔn)串口RS232標(biāo)準(zhǔn)串口DB9標(biāo)準(zhǔn)的公頭及母頭接法RS232標(biāo)準(zhǔn)串口兩個(gè)通訊設(shè)備之間的收發(fā)信號(hào)(RXD與TXD)應(yīng)交叉相連,所以DB9母頭的收發(fā)信號(hào)接法一般與公頭的相反。兩個(gè)設(shè)備之間連接使用“直通型”的串口線即可。在目前的其它工業(yè)控制使用的串口通信中,一般只使用RXD、TXD以及GND三條信號(hào)線,直接傳輸數(shù)據(jù)信號(hào)。USB轉(zhuǎn)串口通信USB轉(zhuǎn)串口主要用于設(shè)備跟電腦通信電平轉(zhuǎn)換芯片一般有CH340、PL2303、CP2102、FT232使用的時(shí)候電腦端需要安裝電平轉(zhuǎn)換芯片的驅(qū)動(dòng)串口到串口通信原生的串口通信主要是控制器跟串口的設(shè)備或者傳感器通信,不需要經(jīng)過(guò)電平轉(zhuǎn)換芯片來(lái)轉(zhuǎn)換電平,直接就用TTL電平通信GPS模塊、GSM模塊、串口轉(zhuǎn)WIFI模塊、HC04藍(lán)牙模塊串口通信協(xié)議層串口通信的數(shù)據(jù)包由發(fā)送設(shè)備通過(guò)自身的TXD接口傳輸?shù)浇邮赵O(shè)備的RXD接口。在串口通信的協(xié)議層中,規(guī)定了數(shù)據(jù)包的內(nèi)容。它由啟始位、主體數(shù)據(jù)、校驗(yàn)位以及停止位組成。通信雙方的數(shù)據(jù)包格式要約定一致才能正常收發(fā)數(shù)據(jù)。串口通信協(xié)議層波特率起始位和停止位有效數(shù)據(jù)校驗(yàn)位串口通信協(xié)議層波特率串口異步通訊中由于沒(méi)有時(shí)鐘信號(hào)(如前面講解的DB9接口中是沒(méi)有時(shí)鐘信號(hào)的),所以兩個(gè)通訊設(shè)備之間需要約定好波特率,即每個(gè)碼元的長(zhǎng)度,以便對(duì)信號(hào)進(jìn)行解碼。常見(jiàn)的波特率為4800、9600、115200等。串口通信協(xié)議層起始位和停止位起始位:由1個(gè)邏輯0的數(shù)據(jù)位表示結(jié)束位:由0.5、1、1.5或2個(gè)邏輯1的數(shù)據(jù)位表示(只要雙方約定好即可)有效數(shù)據(jù)在起始位后緊接著的就是要傳輸?shù)闹饕獌?nèi)容有效數(shù)據(jù)的長(zhǎng)度常被約定為5、6、7或8位長(zhǎng)串口通信協(xié)議層校驗(yàn)位:可選,增強(qiáng)數(shù)據(jù)的抗干擾性。校驗(yàn)方法分為:奇校驗(yàn)(odd)偶校驗(yàn)(even)

0校驗(yàn)(space)1校驗(yàn)(mark)無(wú)校驗(yàn)(noparity)串口通信協(xié)議層奇校驗(yàn)(odd)有效數(shù)據(jù)和校驗(yàn)位中“1”的個(gè)數(shù)為奇數(shù)比如一個(gè)8位長(zhǎng)的有效數(shù)據(jù)為:01101001,此時(shí)總共有4個(gè)“1”,為達(dá)到奇校驗(yàn)效果,校驗(yàn)位為“1”,最后傳輸?shù)臄?shù)據(jù)將是8位的有效數(shù)據(jù)加上1位的校驗(yàn)位總共9位偶校驗(yàn)(even)

有效數(shù)據(jù)和校驗(yàn)位中“1”的個(gè)數(shù)為偶數(shù)比如一個(gè)8位長(zhǎng)的有效數(shù)據(jù)為:01101001,此時(shí)總共有4個(gè)“1”,為達(dá)到偶校驗(yàn)效果,校驗(yàn)位為“0”,最后傳輸?shù)臄?shù)據(jù)將是8位的有效數(shù)據(jù)加上1位的校驗(yàn)位總共9位串口通信協(xié)議層0校驗(yàn)不管有效數(shù)據(jù)中的內(nèi)容是什么,校驗(yàn)位總為“0”1校驗(yàn)校驗(yàn)位總為“1”無(wú)校驗(yàn)數(shù)據(jù)包中不包含校驗(yàn)位小結(jié)串口通信協(xié)議:物理層和協(xié)議層物理層RS232標(biāo)準(zhǔn)串口通信USB轉(zhuǎn)串口通信串口到串口通信協(xié)議層ARM微控制器與嵌入式系統(tǒng)

STM32-USART主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容串行接口STM32-USART功能框圖功能引腳數(shù)據(jù)寄存器控制器小數(shù)波特率生成串行接口串行接口:簡(jiǎn)稱串口,也稱串行通信接口或串行通訊接口(通常指COM接口),是指采用串行通訊方式的擴(kuò)展接口。USART與UARTUSART:通用同步異步收發(fā)器UART:通用異步收發(fā)器STM32芯片具有多個(gè)USART和UART外設(shè)用于串口通訊STM32-USARTSTM32F407ZGT6有四個(gè)USART和兩個(gè)UART,其中USART1和USART6的時(shí)鐘來(lái)源于APB2總線時(shí)鐘,其最大頻率為84MHz,其他四個(gè)的時(shí)鐘來(lái)源于APB1總線時(shí)鐘,其最大頻率為42MHz。STM32-USARTUSART滿足外部設(shè)備對(duì)工業(yè)標(biāo)準(zhǔn)NRZ異步串行數(shù)據(jù)格式的要求使用了小數(shù)波特率發(fā)生器,可以提供多種波特率,使得它的應(yīng)用更加廣泛。USART支持同步單向通信和半雙工單線通信;還支持局域互連網(wǎng)絡(luò)LIN、智能卡(SmartCard)協(xié)議與lrDA(紅外線數(shù)據(jù)協(xié)會(huì))SIRENDEC規(guī)范。STM32-USART功能框圖113412STM32-USART功能框圖-功能引腳TX:發(fā)送數(shù)據(jù)輸出引腳。RX:接收數(shù)據(jù)輸入引腳。SW_RX:數(shù)據(jù)接收引腳,只用于單線和智能卡模式。nRTS:請(qǐng)求以發(fā)送(RequestToSend),n表示低電平有效。如果使能RTS流控制,當(dāng)USART接收器準(zhǔn)備好接收新數(shù)據(jù)時(shí)就會(huì)將nRTS變成低電平;當(dāng)接收寄存器已滿時(shí),nRTS將被設(shè)置為高電平。該引腳只適用于硬件流控制。nCTS:清除以發(fā)送(ClearToSend),n表示低電平有效。如果使能CTS流控制,發(fā)送器在發(fā)送下一幀數(shù)據(jù)之前會(huì)檢測(cè)nCTS引腳,如果為低電平,表示可以發(fā)送數(shù)據(jù),如果為高電平則在發(fā)送完當(dāng)前數(shù)據(jù)幀之后停止發(fā)送。該引腳只適用于硬件流控制。SCLK:發(fā)送器時(shí)鐘輸出引腳。這個(gè)引腳僅適用于同步模式。STM32-USART功能框圖-功能引腳STM32F407ZGT6有四個(gè)USART和兩個(gè)UART,其中USART1和USART6的時(shí)鐘來(lái)源于APB2總線時(shí)鐘,其最大頻率為84MHz,其他四個(gè)的時(shí)鐘來(lái)源于APB1總線時(shí)鐘,其最大頻率為42MHz。UART只是異步傳輸功能,所以沒(méi)有SCLK、nCTS和nRTS功能引腳從上表可發(fā)現(xiàn)USART的功能引腳有多個(gè),只要在程序編程時(shí)軟件綁定引腳即可。STM32-USART功能框圖-數(shù)據(jù)寄存器USART的數(shù)據(jù)寄存器USART_DR包含了發(fā)送數(shù)據(jù)寄存器或者接收數(shù)據(jù)寄存器。一個(gè)專門(mén)用于發(fā)送的可寫(xiě)TDR,一個(gè)專門(mén)用于接收的可讀RDR。當(dāng)進(jìn)行發(fā)送操作時(shí),往USART_DR寫(xiě)入數(shù)據(jù)會(huì)自動(dòng)存儲(chǔ)在TDR內(nèi)。如我們要發(fā)送TEMP這個(gè)數(shù)據(jù),就可以進(jìn)行操作:USART_DR=TEMP;TEMPSTM32-USART功能框圖-數(shù)據(jù)寄存器當(dāng)進(jìn)行讀取操作時(shí),向USART_DR讀取數(shù)據(jù)會(huì)自動(dòng)提取RDR數(shù)據(jù)。如我們要讀取數(shù)據(jù),就會(huì)使用TEMP這個(gè)變量從USART_DR取得數(shù)據(jù),TEMP=USART_DR;TEMPSTM32-USART功能框圖-控制器USART有專門(mén)控制發(fā)送的發(fā)送器、控制接收的接收器,還有喚醒單元、中斷控制等等。STM32-USART功能框圖-波特率生成波特率單位時(shí)間內(nèi)傳輸?shù)拇a元個(gè)數(shù)。比特率指單位時(shí)間內(nèi)傳輸?shù)谋忍財(cái)?shù),單位bit/s(bps)。USART串口傳輸時(shí)的比特?cái)?shù)與碼元相同,因此波特率=比特率。波特率越大,傳輸速率越快。STM32-USART功能框圖-波特率生成USART的發(fā)送器和接收器使用相同的波特率。USARTDIV是一個(gè)存放在波特率寄存器(USART_BRR)的一個(gè)無(wú)符號(hào)定點(diǎn)數(shù)。其中DIV_Mantissa[11:0]位定義USARTDIV的整數(shù)部分,DIV_Fraction[3:0]位定義,USARTDIV的小數(shù)部分,DIV_Fraction[3]位只有在OVER8位為0時(shí)有效,否則必須清零。以115200為例。這里的OVER8我們?nèi)?,表示16倍過(guò)采樣USART:USART1,時(shí)鐘為84M波特率:115200OVER8:0,16倍過(guò)采樣,BRR小數(shù)位有效STM32-USART功能框圖-波特率生成小結(jié)STM32的USARTSTM32-USART功能框圖功能引腳數(shù)據(jù)寄存器控制器小數(shù)波特率生成ARM微控制器與嵌入式系統(tǒng)

USART編程要點(diǎn)主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容串口硬件連接串口編程要點(diǎn)USART結(jié)構(gòu)體初始化USART庫(kù)函數(shù)USART發(fā)送接收數(shù)據(jù)串口硬件連接以單片機(jī)與PC通信為例:USART通過(guò)3個(gè)引腳與其他設(shè)備連接在STM32的USART1中:RX:數(shù)據(jù)串行輸入。PA10TX:發(fā)送數(shù)據(jù)輸出。PA9GND串口硬件連接TXPA10RXPA9串口硬件連接串口編程要點(diǎn)1.使能RX和TX引腳GPIO時(shí)鐘和USART時(shí)鐘;2.初始化GPIO,并將GPIO復(fù)用到USART上;3.配置USART參數(shù);4.配置中斷控制器并使能USART接收中斷;5.使能USART;6.在USART接收中斷服務(wù)函數(shù)實(shí)現(xiàn)數(shù)據(jù)接收和發(fā)送。串口編程要點(diǎn)1.使能RX和TX引腳GPIO時(shí)鐘和USART時(shí)鐘使能GPIO時(shí)鐘:PA9和PA10的GPIO口時(shí)鐘RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);串口編程要點(diǎn)1.使能RX和TX引腳GPIO時(shí)鐘和USART時(shí)鐘使能USART時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);串口編程要點(diǎn)2.初始化GPIO,并將GPIO復(fù)用到USART上;初始化GPIOGPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_9;GPIO_Init(GPIOA,&GPIO_InitStructure);串口編程要點(diǎn)2.初始化GPIO,并將GPIO復(fù)用到USART上;將GPIO復(fù)用到USART上voidGPIO_PinAFConfig(GPIO_TypeDef*GPIOx,uint16_tGPIO_PinSource,uint8_tGPIO_AF)GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化3.配置USART參數(shù);--USART結(jié)構(gòu)體typedefstruct{uint32_tUSART_BaudRate;//波特率BRRuint16_tUSART_WordLength;//字長(zhǎng)CR1_Muint16_tUSART_StopBits;//停止位CR2_STOPuint16_tUSART_Parity;//校驗(yàn)控制CR1_PCE、CR1_PSuint16_tUSART_Mode;//模式選擇CR1_TE、CR1_REuint16_tUSART_HardwareFlowControl;//硬件流選擇CR3_CTSE、CR3_RTSE}USART_InitTypeDef;串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化3.配置USART參數(shù);--USART結(jié)構(gòu)體USART_BaudRate;波特率一般設(shè)置為2400、9600、19200、115200。標(biāo)準(zhǔn)庫(kù)函數(shù)會(huì)根據(jù)設(shè)定值計(jì)算得到USARTDIV值,并設(shè)置USART_BRR寄存器值USART_InitStructure.USART_BaudRate=115200;串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化3.配置USART參數(shù);--USART結(jié)構(gòu)體USART_WordLength數(shù)據(jù)幀字長(zhǎng),可選8位或9位。如果沒(méi)有使能奇偶校驗(yàn)控制,一般使用8數(shù)據(jù)位;如果使能了奇偶校驗(yàn)則一般設(shè)置為9數(shù)據(jù)位。USART_InitStructure.USART_WordLength=USART_WordLength_8b;串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化3.配置USART參數(shù);--USART結(jié)構(gòu)體USART_StopBits停止位設(shè)置,可選0.5個(gè)、1個(gè)、1.5個(gè)和2個(gè)停止位,一般我們選擇1個(gè)停止位。USART_InitStructure.USART_StopBits=USART_StopBits_1;串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化3.配置USART參數(shù);--USART結(jié)構(gòu)體USART_Parity奇偶校驗(yàn)控制選擇。可選擇無(wú)校驗(yàn),偶校驗(yàn),奇校驗(yàn)USART_InitStructure.USART_Parity=USART_Parity_No;串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化3.配置USART參數(shù);--USART結(jié)構(gòu)體USART_ModeUSART模式選擇,有USART_Mode_Rx

和USART_Mode_TxUSART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//同時(shí)使能收發(fā)串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化3.配置USART參數(shù);--USART結(jié)構(gòu)體USART_HardwareFlowControl硬件流控制選擇,只有在硬件流控制模式才有效可選有⑴使能RTS、⑵使能CTS、⑶同時(shí)使能RTS和CTS、⑷不使能硬件流。USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化3.配置USART參數(shù);--USART結(jié)構(gòu)體

/*完成USART初始化配置*/USART_Init(DEBUG_USART,&USART_InitStructure);串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化4.配置中斷控制器并使能USART接收中斷;NVIC_Configuration();

/*嵌套向量中斷控制器NVIC配置*/USART_ITConfig(DEBUG_USART,USART_IT_RXNE,ENABLE);/*使能串口接收中斷*

串口編程要點(diǎn)-USART結(jié)構(gòu)體初始化5.使能USART;USART_Cmd(DEBUG_USART,ENABLE);6.在USART接收中斷服務(wù)函數(shù)實(shí)現(xiàn)數(shù)據(jù)接收和發(fā)送。常用的USART庫(kù)函數(shù)函數(shù)USART_Init初始化異步串口,包括選定使用的串口,設(shè)定串口的數(shù)據(jù)傳輸速率、數(shù)據(jù)位、檢驗(yàn)方式、停止位、流量控制方式USART_Init(USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct);USART_Init(USART1,&USART_InitStructure);常用的USART庫(kù)函數(shù)函數(shù)USART_Cmd使能或失能USART外設(shè)voidUSART_Cmd(USART_TypeDef*USARTx,FunctionalStateNewState);USART_Cmd(USART1,ENABLE);//使能USART_Cmd(USART1,DISABLE);//失能常用的USART庫(kù)函數(shù)函數(shù)USART_ITConfig使能或失能指定的USART中斷voidUSART_ITConfig(USART_TypeDef*USARTx,uint16_tUSART_IT,FunctionalStateNewState);常用的USART_IT的值有:USART_IT_TXE(發(fā)送數(shù)據(jù)寄存器為空),USART_IT_RXNE(接收數(shù)據(jù)寄存器非空,即有數(shù)據(jù)可讀)USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能接收中斷常用的USART庫(kù)函數(shù)函數(shù)USART_SendData數(shù)據(jù)發(fā)送函數(shù),通過(guò)外設(shè)USARTx發(fā)送單個(gè)數(shù)據(jù)voidUSART_SendData(USART_TypeDef*USARTx,uint16_tData);USART_SendData(USART1,0x26);//通過(guò)USART1發(fā)送字符0x26這里要說(shuō)明的是發(fā)送的Data是字符常用的USART庫(kù)函數(shù)函數(shù)USART_ReceiveData數(shù)據(jù)接收函數(shù),返回外設(shè)USARTx接收的數(shù)據(jù)uint16_tUSART_ReceiveData(USART_TypeDef*USARTx);RxData=USART_ReceiveData(USART1);//從USART1接收的字符存入RxData中常用的USART庫(kù)函數(shù)函數(shù)USART_GetFlagStatus檢查指定的USART標(biāo)志位設(shè)置與否FlagStatusUSART_GetFlagStatus(USART_TypeDef*USARTx,uint32_tUSART_FLAG);USART_FLAG為需要檢查的USART標(biāo)志位,可以取一個(gè)或多個(gè)值的組合作為該參數(shù)的值USART_FLAG的值有:USART_FLAG_RXNE(接收數(shù)據(jù)完成),USART_FLAG_TXE(發(fā)送數(shù)據(jù)寄存器為空),USART_FLAG_TC(發(fā)送數(shù)據(jù)完成)Status=USART_GetFlagStatus(USART1,USART_FLAG_TXE);//檢查USART1的發(fā)送標(biāo)志位常用的USART庫(kù)函數(shù)函數(shù)USART_ClearFlag清除USART的待處理標(biāo)志位voidUSART_ClearFlag(USART_TypeDef*USARTx,uint32_tUSART_FLAG);USART_ClearFlag(USART1,USART_FLAG_ORG);//清除USART1的溢出錯(cuò)誤標(biāo)志位常用的USART庫(kù)函數(shù)函數(shù)USART_GetITStatus檢查指定的USART中斷發(fā)生與否ITStatusUSART_GetITStatus(USART_TypeDef*USARTx,uint32_tUSART_IT);USART_IT為需要檢查的USART中斷標(biāo)志位常用的USART_IT的值有:USART_IT_TXE(發(fā)送數(shù)據(jù)寄存器為空),USART_IT_RXNE(接收數(shù)據(jù)寄存器非空,即有數(shù)據(jù)可讀)Status=USART_GetITStatus(USART1,USART_IT_TXE);//檢查USART1的發(fā)送中斷標(biāo)志位常用的USART庫(kù)函數(shù)函數(shù)USART_ClearITPendingBit清除USART的中斷標(biāo)志位voidUSART_ClearITPendingBit(USART_TypeDef*USARTx,uint32_tUSART_IT);USART_ClearITPendingBit(USART1,USART_IT_TXE);//清除USART1的發(fā)送數(shù)據(jù)中斷標(biāo)志位常用的庫(kù)函數(shù)函數(shù)GPIO_PinAFConfig配置GPIO的某個(gè)引腳為具體的第二功能voidGPIO_PinAFConfig(GPIO_TypeDef*GPIOx,uint16_tGPIO_PinSource,uint8_tGPIO_AF);GPIO_AF的值有:GPIO_AF_USART1,GPIO_AF6_SPI1等GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//配置PA9為它的第二功能串口發(fā)送接收數(shù)據(jù)小結(jié)串口硬件連接串口編程要點(diǎn)USART結(jié)構(gòu)體初始化USART庫(kù)函數(shù)USART發(fā)送接收數(shù)據(jù)ARM微控制器與嵌入式系統(tǒng)

USART編程實(shí)驗(yàn)主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容串口硬件連接串口軟件編程串口接發(fā)數(shù)據(jù)調(diào)試串口硬件連接TXPA10RXPA9串口軟件編程1.使能RX和TX引腳GPIO時(shí)鐘和USART時(shí)鐘;2.初始化GPIO,并將GPIO復(fù)用到USART上;3.配置USART參數(shù);4.配置中斷控制器并使能USART接收中斷;5.使能USART;6.在USART接收中斷服務(wù)函數(shù)實(shí)現(xiàn)數(shù)據(jù)接收和發(fā)送。串口收發(fā)數(shù)據(jù)小結(jié)串口硬件連接串口軟件編程串口接發(fā)數(shù)據(jù)調(diào)試ARM微控制器與嵌入式系統(tǒng)

Systick-系統(tǒng)定時(shí)器主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容Systick系統(tǒng)定時(shí)器系統(tǒng)定時(shí)器工作原理Systick寄存器Systick庫(kù)函數(shù)Systick編程要點(diǎn)SysTick系統(tǒng)定時(shí)器SysTick定時(shí)器,是一個(gè)簡(jiǎn)單的定時(shí)器,對(duì)于CM3,CM4內(nèi)核芯片,都有Systick定時(shí)器。Systick定時(shí)器常用來(lái)做延時(shí),或者實(shí)時(shí)系統(tǒng)的心跳時(shí)鐘。這樣可以節(jié)省MCU資源,不用浪費(fèi)一個(gè)定時(shí)器。一般在STM32+UCOSII系統(tǒng)中,都采用Systick定時(shí)器來(lái)做為UCOSII的心跳時(shí)鐘。SysTick系統(tǒng)定時(shí)器Systick定時(shí)器就是系統(tǒng)滴答定時(shí)器,一個(gè)24

位的倒計(jì)數(shù)定時(shí)器,計(jì)到0

時(shí),將從RELOAD

寄存器中自動(dòng)重裝載定時(shí)初值。只要不把它在SysTick

控制狀態(tài)寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作SysTick定時(shí)器被捆綁在NVIC中,用于產(chǎn)生SYSTICK異常(異常號(hào):15)。Systick中斷的優(yōu)先級(jí)也可以設(shè)置。typedefstruct{__IOuint32_tCTRL;/*SYST_CSR控制與狀態(tài)寄存器*/__IOuint32_tLOAD;/*SYS_RVR重裝載寄存器*/__IOuint32_tVAL;/*SYST_CVR當(dāng)前數(shù)值寄存器(計(jì)數(shù)器)*/__Iuint32_tCALIB;/*SYST_CALIB校準(zhǔn)寄存器*/}SysTick_Type;

Systick寄存器Bit0 0=滴答定時(shí)器失能 1=滴答定時(shí)器使能Bit1 0=不開(kāi)啟中斷 1=開(kāi)啟中斷Bit2 0=AHB時(shí)鐘8分頻 1=AHB時(shí)鐘Bit16 0=計(jì)數(shù)未完成 1=計(jì)數(shù)完成Systick狀態(tài)與控制寄存器Systick狀態(tài)與控制寄存器

重裝載寄存器共32位,僅0-23位有效Systick重裝載寄存器

當(dāng)前數(shù)值寄存器,也可當(dāng)成計(jì)數(shù)寄存器共32位,僅0-23位有效Systick當(dāng)前數(shù)值寄存器重裝載寄存器遞減計(jì)數(shù)器STK_CLKSTK_LOADSTK_VALSTK_CTRLUSysTick的工作原理SysTick庫(kù)函數(shù)在內(nèi)核core_cm4.h中SysTick庫(kù)函數(shù)的宏定義SysTick庫(kù)函數(shù)在內(nèi)核core_cm4.h中SysTick編程要點(diǎn)初始化系統(tǒng)定時(shí)器(時(shí)鐘選擇)設(shè)置重裝載寄存器的值清除當(dāng)前數(shù)值寄存器的值配置控制與狀態(tài)寄存器SysTick編程要點(diǎn)初始化系統(tǒng)定時(shí)器(時(shí)鐘選擇)SysTick編程要點(diǎn)SysTick編程任務(wù)讓SysTick產(chǎn)生1s的定時(shí),讓LED亮滅。小結(jié)Systick系統(tǒng)定時(shí)器系統(tǒng)定時(shí)器工作原理Systick寄存器Systick庫(kù)函數(shù)Systick編程要點(diǎn)ARM微控制器與嵌入式系統(tǒng)

Systick-編程實(shí)驗(yàn)主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容Systick編程任務(wù)Systick編程要點(diǎn)完成編程任務(wù)SysTick編程任務(wù)讓SysTick產(chǎn)生1s的定時(shí),讓LED亮滅。點(diǎn)亮LED燈編程要點(diǎn)1-初始化LED相關(guān)的GPIO2-配置SysTick(STK_CTRL寄存器)3-main函數(shù)小結(jié)Systick編程任務(wù)Systick編程要點(diǎn)完成編程任務(wù)ARM微控制器與嵌入式系統(tǒng)

SPI協(xié)議主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容SPI概述SPI協(xié)議SPI通訊SPI概述SPI:SerialPeripheralInterface-串行外設(shè)接口SPI是一種高速的,全雙工,同步的通信總線四線同步串行通訊接口以主從方式工作,通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備SCLKSPIMOSI主機(jī)MISO

SSSCLKMOSISPIMISO從機(jī)SSSPI協(xié)議MOSI–MasterOutputSlaveInput,主出從入,主設(shè)備發(fā)送到從設(shè)備的信號(hào);MISO–MasterInputSlaveOutput,主入從出,從設(shè)備發(fā)送到主設(shè)備的信號(hào);SCLK–SerialClock,時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生的工作時(shí)鐘,每個(gè)SCK周期完成一個(gè)bit的傳輸;CS(NSS、SS)–ChipSelect,從設(shè)備選擇端,由主設(shè)備控制;當(dāng)從設(shè)備收到該端口為低電平時(shí),設(shè)備有效,對(duì)于主設(shè)備,平時(shí)為高電平,當(dāng)傳輸時(shí)給出低電平選通從設(shè)備。SPI協(xié)議做一個(gè)動(dòng)畫(huà)SPI:SerialPeripheralInterface串行同步全雙工主從模式點(diǎn)對(duì)點(diǎn)或者總線靈活的時(shí)鐘數(shù)據(jù)幀的長(zhǎng)度可以是4-16位SPI通訊SPI通訊SPI模式CPOLCPHA空閑時(shí)SCK時(shí)鐘采樣時(shí)刻000低電平奇數(shù)邊沿101低電平偶數(shù)邊沿210高電平奇數(shù)邊沿311高電平偶數(shù)邊沿SPI通訊-CPOL/CPHA及通訊模式CPOL及CPHA的不同狀態(tài),SPI分成了四種模式,主機(jī)與從機(jī)需要工作在相同的模式下才可以正常通訊SPI基本通訊過(guò)程SPI通訊-主模式控制整個(gè)傳輸過(guò)程通過(guò)SS信號(hào)選擇對(duì)應(yīng)的通信從節(jié)點(diǎn)決定SCK的波特率、相位、極性產(chǎn)生SCK的時(shí)鐘信號(hào)驅(qū)動(dòng)MOSI信號(hào)采樣MISO信號(hào)SPI通訊-從模式響應(yīng)主節(jié)點(diǎn)的信號(hào)當(dāng)SS被選通時(shí)才激活根據(jù)預(yù)先約定的相位/極性來(lái)檢測(cè)SCK信號(hào)驅(qū)動(dòng)MISO信號(hào)采樣MOSI信號(hào)小結(jié)SPI概述SPI協(xié)議SPI通訊ARM微控制器與嵌入式系統(tǒng)

STM32-SPI主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容STM32的SPISPI框圖SPI通訊SPI初始化結(jié)構(gòu)體SPI庫(kù)函數(shù)STM32的SPISPI接口提供兩個(gè)主要功能,支持SPI協(xié)議或I2S音頻協(xié)議。串行外設(shè)接口(SPI)可與外部器件進(jìn)行半雙工/全雙工的同步串行通信。主模式或從模式操作,8個(gè)主模式波特率預(yù)分頻器(最大值為fPCLK/2),從模式頻率(最大值為fPCLK/2),可為外部從器件提供通信時(shí)鐘

(SCK)該接口還能夠在多主模式配置下工作8位或16位傳輸幀格式選擇可編程的時(shí)鐘極性和相位可編程的數(shù)據(jù)順序,最先移位MSB或LSB可觸發(fā)中斷的專用發(fā)送和接收標(biāo)志通訊引腳時(shí)鐘控制邏輯數(shù)據(jù)控制邏輯整體控制邏輯STM32的SPI框圖STM32芯片有多個(gè)SPI外設(shè),它們的SPI通訊信號(hào)引出到不同的GPIO引腳上,使用時(shí)必須配置到這些指定的引腳,以《STM32F4xx規(guī)格書(shū)》為準(zhǔn)。引腳SPI編號(hào)SPI1SPI2SPI3SPI4SPI5SPI6MOSIPA7/PB5PB15/PC3/PI3PB5/PC12/PD6PE6/PE14PF9/PF11PG14MISOPA6/PB4PB14/PC2/PI2PB4/PC11PE5/PE13PF8/PH7PG12SCKPA5/PB3PB10/PB13/PD3PB3/PC10PE2/PE12PF7/PH6PG13NSSPA4/PA15PB9/PB12/PI0PA4/PA15PE4/PE11PF6/PH5PG8

其中SPI1、SPI4、SPI5、SPI6是APB2上的設(shè)備,最高通信速率達(dá)42Mbtis/s,SPI2、SPI3是APB1上的設(shè)備,最高通信速率為21Mbits/s。其它功能上沒(méi)有差異。SPI的SPI通訊引腳SCK線的時(shí)鐘信號(hào),由波特率發(fā)生器根據(jù)“控制寄存器CR1”中的BR[0:2]位控制,該位是對(duì)fpclk時(shí)鐘的分頻因子,對(duì)fpclk的分頻結(jié)果就是SCK引腳的輸出時(shí)鐘頻率BR[0:2]分頻結(jié)果(SCK頻率)BR[0:2]分頻結(jié)果(SCK頻率)000fpclk/2100fpclk/32001fpclk/4101fpclk/64010fpclk/8110fpclk/128011fpclk/16111fpclk/256其中的fpclk頻率是指SPI所在的APB總線頻率,APB1為fpclk1,APB2為fpckl2。SPI的時(shí)鐘控制邏輯SPI的MOSI及MISO都連接到數(shù)據(jù)移位寄存器上,數(shù)據(jù)移位寄存器的數(shù)據(jù)來(lái)源來(lái)源于接收緩沖區(qū)及發(fā)送緩沖區(qū)。通過(guò)寫(xiě)SPI的“數(shù)據(jù)寄存器DR”把數(shù)據(jù)填充到發(fā)送緩沖區(qū)中。通過(guò)讀“數(shù)據(jù)寄存器DR”,可以獲取接收緩沖區(qū)中的內(nèi)容。其中數(shù)據(jù)幀長(zhǎng)度可以通過(guò)“控制寄存器CR1”的“DFF位”配置成8位及16位模式;配置“LSBFIRST位”可選擇MSB先行還是LSB先行。SPI的數(shù)據(jù)控制邏輯整體控制邏輯負(fù)責(zé)協(xié)調(diào)整個(gè)SPI外設(shè),控制邏輯的工作模式根據(jù)“控制寄存器(CR1/CR2)”的參數(shù)而改變,基本的控制參數(shù)包括前面提到的SPI模式、波特率、LSB先行、主從模式、單雙向模式等等。在外設(shè)工作時(shí),控制邏輯會(huì)根據(jù)外設(shè)的工作狀態(tài)修改“狀態(tài)寄存器(SR)”,只要讀取狀態(tài)寄存器相關(guān)的寄存器位,就可以了解SPI的工作狀態(tài)了。除此之外,控制邏輯還根據(jù)要求,負(fù)責(zé)控制產(chǎn)生SPI中斷信號(hào)、DMA請(qǐng)求及控制NSS信號(hào)線。實(shí)際應(yīng)用中,一般不使用STM32SPI外設(shè)的標(biāo)準(zhǔn)NSS信號(hào)線,而是更簡(jiǎn)單地使用普通的GPIO,軟件控制它的電平輸出,從而產(chǎn)生通訊起始和停止信號(hào)。SPI的整體控制邏輯通訊過(guò)程跟其它外設(shè)一樣,STM32標(biāo)準(zhǔn)庫(kù)提供了SPI初始化結(jié)構(gòu)體及初始化函數(shù)來(lái)配置SPI外設(shè)。初始化結(jié)構(gòu)體及函數(shù)定義在庫(kù)文件“stm32f4xx_spi.h”及“stm32f4xx_spi.c”中,編程時(shí)我們可以結(jié)合這兩個(gè)文件內(nèi)的注釋使用或參考庫(kù)幫助文檔。SPI初始化結(jié)構(gòu)體SPI_Direction:設(shè)置SPI為單向或雙向的數(shù)據(jù)模式可設(shè)置為:雙線全雙工(SPI_Direction_2Lines_FullDuplex),雙線只接收(SPI_Direction_2Lines_RxOnly),單線只接收(SPI_Direction_1Line_Rx)、單線只發(fā)送模式(SPI_Direction_1Line_Tx)。SPI初始化結(jié)構(gòu)體SPI_Mode:設(shè)置SPI工作模式主機(jī)模式(SPI_Mode_Master)從機(jī)模式(SPI_Mode_Slave)這兩個(gè)模式的最大區(qū)別為SPI的SCK信號(hào)線的時(shí)序,SCK的時(shí)序是由通訊中的主機(jī)產(chǎn)生的。若被配置為從機(jī)模式,STM32的SPI外設(shè)將接受外來(lái)的SCK信號(hào)。SPI初始化結(jié)構(gòu)體SPI_DataSize:選擇SPI通訊的數(shù)據(jù)幀大小4位(SPI_DataSize_4b)8位(SPI_DataSize_8b)16位(SPI_DataSize_16b)SPI初始化結(jié)構(gòu)體SPI_CPOL:配置SPI的時(shí)鐘極性CPOL高電平(SPI_CPOL_High)低電平(SPI_CPOL_Low)SPI_CPHA:配置時(shí)鐘相位CPHASPI_CPHA_1Edge(在SCK的奇數(shù)邊沿采集數(shù)據(jù))

SPI_CPHA_2Edge

(在SCK的偶數(shù)邊沿采集數(shù)據(jù))

SPI初始化結(jié)構(gòu)體SPI_NSS:配置NSS引腳的使用模式硬件模式(SPI_NSS_Hard

),這時(shí)SPI片選信號(hào)由SPI硬件自動(dòng)產(chǎn)生軟件模式(SPI_NSS_Soft

),外部引腳控制。實(shí)際中軟件模式應(yīng)用比較多。SPI初始化結(jié)構(gòu)體SPI_BaudRatePrescaler:設(shè)置波特率分頻因子,分頻后的時(shí)鐘即為SPI的SCK信號(hào)線的時(shí)鐘頻率??稍O(shè)置為fpclk的2、4、6、8、16、32、64、128、256分頻。SPI_InitStruct.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_32;SPI初始化結(jié)構(gòu)體SPI_FirstBit:設(shè)置數(shù)據(jù)傳輸從MSB開(kāi)始還是LSB開(kāi)始MSB先行:

SPI_FirstBit_MSBLSB先行:SPI_FirstBit_LSBSPI_InitStruct.SPI_FirstBit=SPI_FirstBit_MSB;SPI初始化結(jié)構(gòu)體SPI_CRCPolynomial:這是SPI的CRC校驗(yàn)中的多項(xiàng)式,若我們使用CRC校驗(yàn)時(shí),就使用這個(gè)成員的參數(shù)(多項(xiàng)式),來(lái)計(jì)算CRC的值。配置完這些結(jié)構(gòu)體成員后,要調(diào)用SPI_Init函數(shù)把這些參數(shù)寫(xiě)入到寄存器中,實(shí)現(xiàn)SPI的初始化,然后調(diào)用SPI_Cmd來(lái)使能SPI外設(shè)SPI初始化結(jié)構(gòu)體SPI的庫(kù)函數(shù)SPI_InitVoidSPI_Init(SPI_TypeDef*SPIx,SPI_InitTypeDef*SPI_InitStruct)功能:根據(jù)SPI_InitStruct中的參數(shù)初始化外設(shè)SPIx的寄存器。SPI_Init(SPI1,&SPI_InitStruct);SPI的庫(kù)函數(shù)SPI_CmdvoidSPI_Cmd(SPI_TypeDef*SPIx,FunctionalStateNewState);功能:使能或失能指定的SPI外設(shè)SPI_Cmd(SPI1,ENABLE);SPI的庫(kù)函數(shù)SPI_I2S_ITConfigvoidSPI_I2S_ITConfig(SPI_TypeDef*SPIx,uint8_tSPI_I2S_IT,FunctionalStateNewState);功能:使能或失能指定的SPI/I2S中斷SPI_I2S_IT可取的值:SPI_I2S_IT_TXE(發(fā)送緩存空中斷屏蔽),SPI_I2S_IT_RXNE(接收緩存非空中斷屏蔽),SPI_I2S_IT_ERR(錯(cuò)誤中斷屏蔽)SPI的庫(kù)函數(shù)SPI_I2S_SendDatavoidSPI_I2S_SendData(SPI_TypeDef*SPIx,uint16_tData);功能:通過(guò)外設(shè)SPIx發(fā)送數(shù)據(jù)SPI_I2S_SendData(SPI1,0x55);SPI的庫(kù)函數(shù)SPI_I2S_ReceiveDatauint16_tSPI_I2S_ReceiveData(SPI_TypeDef*SPIx);功能:返回通過(guò)外設(shè)SPIx最新接收的數(shù)據(jù)temp=SPI_I2S_ReceiveData(SPI1);SPI的庫(kù)函數(shù)SPI_I2S_GetFlagStatusFlagStatusSPI_I2S_GetFlagStatus(SPI_TypeDef*SPIx,uint16_tSPI_I2S_FLAG);功能:檢查指定的SPI/I2S標(biāo)志位設(shè)置與否SPI_I2S_FLAG可取的值:

SPI_I2S_FLAG_TXE:發(fā)送緩存空標(biāo)志位SPI_I2S_FLAG_RXNE:接收緩存非空標(biāo)志位while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);SPI的庫(kù)函數(shù)SPI_I2S_ClearFlagvoidSPI_I2S_ClearFlag(SPI_TypeDef*SPIx,uint16_tSPI_I2S_FLAG);功能:清除指定的SPI/I2S標(biāo)志位SPI_I2S_FLAG可取的值:

SPI_I2S_FLAG_TXE:發(fā)送緩存空標(biāo)志位SPI_I2S_FLAG_RXNE:接收緩存非空標(biāo)志位SPI的庫(kù)函數(shù)SPI_I2S_GetITStatusITStatusSPI_I2S_GetITStatus(SPI_TypeDef*SPIx,uint8_tSPI_I2S_IT);功能:用于檢查指定的SPI/I2S中斷發(fā)生與否SPI_I2S_IT可取的值:

SPI_I2S_IT_TXE:發(fā)送緩存空標(biāo)志位SPI_I2S_IT_RXNE:接收緩存非空標(biāo)志位小結(jié)STM32的SPISPI框圖SPI通訊SPI初始化結(jié)構(gòu)體SPI庫(kù)函數(shù)ARM微控制器與嵌入式系統(tǒng)

PWM原理主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容什么是PWM?PWM應(yīng)用定時(shí)器生成PWM原理STM32定時(shí)器結(jié)構(gòu)什么是PWM?PWM:“PulseWidthModulation”脈沖寬度調(diào)制脈沖寬度是指高電平持續(xù)的時(shí)間占空比是高電平時(shí)間與周期時(shí)間的比值。PWM應(yīng)用數(shù)模轉(zhuǎn)換電機(jī)控制音調(diào)產(chǎn)生燈的亮度控制使用PWM進(jìn)行數(shù)模轉(zhuǎn)換使用PWM驅(qū)動(dòng)揚(yáng)聲器使用PWM調(diào)節(jié)燈的亮度使用PWM控制電機(jī)定時(shí)器生成PWM原理PWM原理計(jì)數(shù)寄存器CNT重裝寄存器ARR比較寄存器CCRCNTARRCCR定時(shí)器生成PWM原理在邊沿對(duì)齊模式下,計(jì)數(shù)器CNT只工作在一種模式,遞增或者遞減模式。這里我們以CNT

工作在遞增模式為例,在圖中,ARR=8,CCR=4,CNT從0開(kāi)始計(jì)數(shù),當(dāng)CNT<CCR的值時(shí),輸出

為有效的高電平,CNT>=CCR時(shí),輸出為無(wú)效的低電平。當(dāng)CNT>ARR時(shí),CNT又從0開(kāi)始計(jì)數(shù)并生成計(jì)數(shù)器上溢事件,以此循環(huán)往復(fù)。PWM的對(duì)齊方式重新畫(huà)一個(gè)圖PWM的對(duì)齊方式重新畫(huà)一個(gè)圖PWM的對(duì)齊方式重新畫(huà)一個(gè)圖STM32高級(jí)定時(shí)器結(jié)構(gòu)基本定時(shí)器(TIM6,TIM7):只有最基本的定時(shí)功能。基本定時(shí)器TIM6和TIM7各包含一個(gè)16位自動(dòng)裝載計(jì)數(shù)器,由各自的可編程預(yù)分頻器驅(qū)動(dòng)通用定時(shí)器(TIM2~TIM5,TIM9~TIM14)

:除了基本的定時(shí)器的功能外,還具有測(cè)量輸入信號(hào)的脈沖長(zhǎng)度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和PWM)高級(jí)定時(shí)器(TIM1,TIM8):高級(jí)定時(shí)器不但具有基本,通用定時(shí)器的所有的功能,還具有控制交直流電動(dòng)機(jī)所有的功能,比如它可以輸出互補(bǔ)帶死區(qū)的信號(hào)等等STM32高級(jí)定時(shí)器結(jié)構(gòu)定時(shí)器種類(lèi)位數(shù)計(jì)數(shù)器模式產(chǎn)生DMA請(qǐng)求捕獲/比較通道互補(bǔ)輸出特殊應(yīng)用場(chǎng)景高級(jí)定時(shí)器(TIM1,TIM8)16向上,向下,向上/下可以4有帶可編程死區(qū)的互補(bǔ)輸出通用定時(shí)器(TIM2,TIM5)32向上,向下,向上/下可以4無(wú)通用。定時(shí)計(jì)數(shù),PWM輸出,輸入捕獲,輸出比較通用定時(shí)器(TIM3,TIM4)16向上,向下,向上/下可以4無(wú)通用。定時(shí)計(jì)數(shù),PWM輸出,輸入捕獲,輸出比較通用定時(shí)器(TIM9~TIM14)16向上沒(méi)有2無(wú)通用。定時(shí)計(jì)數(shù),PWM輸出,輸入捕獲,輸出比較基本定時(shí)器(TIM6,TIM7)16向上,向下,向上/下可以0無(wú)主要應(yīng)用于驅(qū)動(dòng)DACSTM32高級(jí)定時(shí)器結(jié)構(gòu)STM32高級(jí)定時(shí)器結(jié)構(gòu)默認(rèn)調(diào)用SystemInit函數(shù)情況下:SYSCLK=168MAHB時(shí)鐘=168MAPB1時(shí)鐘=42M所以APB1的分頻系數(shù)=AHB/APB1時(shí)鐘=4所以,通用定時(shí)器時(shí)鐘CK_INT=2*42M=84M內(nèi)部時(shí)鐘選擇定時(shí)器生成PWM的頻率與占空比若選用TIM3,掛載在APB1時(shí)鐘總線上,因此TIMxCLK=84MHz所以:Prescaler=84(分頻)TIMxcounterclock=84MHz/84=1MHz若ARR=1000=>Frequency=TIMxcounterclock/ARR=>Frequency=1MHz/1000=1KHzCCR1=500=>TIMxChannel1dutycycle=(CCR1/ARR)*100%=50%生成的PWM的頻率為1KHz,占空比為50%定時(shí)器生成PWM的頻率與占空比若選用TIM3,掛載在APB1時(shí)鐘總線上,因此TIMxCLK=84MHz。如果想生成一個(gè)500HZ頻率,占空比為25%的PWM。所以:Prescaler=(<2^32即可)(分頻)TIMxcounterclock=84MHz/prescaler=(84)若ARR=(2000)

=>Frequency=TIMxcounterclock/ARRCCR1=(500)=>TIMxChannel1dutycycle=(CCR1/ARR)*100%=25%小結(jié)什么是PWM?PWM應(yīng)用定時(shí)器生成PWMSTM32定時(shí)器結(jié)構(gòu)ARM微控制器與嵌入式系統(tǒng)

STM32的PWM配置主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容STM32的PWM定時(shí)器生成PWM的編程要點(diǎn)輸出通道配置PWM結(jié)構(gòu)體PWM庫(kù)函數(shù)定時(shí)器生成PWM原理PWM原理計(jì)數(shù)寄存器CNT重裝寄存器ARR比較寄存器CCRCNTARRCCR定時(shí)器生成PWM的編程要點(diǎn)1、開(kāi)啟GPIO時(shí)鐘、定時(shí)器時(shí)鐘2、PWM輸出端口配置3、復(fù)用引腳功能映射4、定時(shí)器配置5、輸出通道配置6、PWM使能7、設(shè)置比較器值輸出PWMPWM的輸出通道針對(duì)高級(jí)定時(shí)器和通用定時(shí)器,查STM32的數(shù)據(jù)手冊(cè),選擇使用不同定時(shí)器的不同通道進(jìn)行配置。我們使用TIM3。定時(shí)器生成PWM的編程要點(diǎn)1、打開(kāi)輸出通道的GPIO時(shí)鐘以及定時(shí)器(PWM)的時(shí)鐘(1)打開(kāi)GPIO的時(shí)鐘使用TIM3的4個(gè)通道分別為:PA6,PA7,PB0,PB1打開(kāi)GPIOA和GPIOB的時(shí)鐘RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);

定時(shí)器生成PWM的編程要點(diǎn)1、打開(kāi)輸出通道的GPIO時(shí)鐘以及定時(shí)器(PWM)的時(shí)鐘(2)打開(kāi)TIM3的時(shí)鐘APB1時(shí)鐘總線

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);定時(shí)器生成PWM的編程要點(diǎn)2、PWM輸出端口配置使用TIM3的4個(gè)通道分別為:PA6,PA7,PB0,PB1先對(duì)PA6,PA7配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_Init(GPIOA,&GPIO_InitStructure);

定時(shí)器生成PWM的編程要點(diǎn)2、PWM輸出端口配置使用TIM3的4個(gè)通道分別為:PA6,PA7,PB0,PB1再對(duì)PB0,PB1配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//浮空模式GPIO_Init(GPIOB,&GPIO_InitStructure);

定時(shí)器生成PWM的編程要點(diǎn)3、復(fù)用引腳功能映射GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_TIM3);GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM3);GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_TIM3);GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM3);定時(shí)器生成PWM的編程要點(diǎn)4、定時(shí)器配置typedefstruct{uint16_tTIM_Prescaler; //預(yù)分頻系數(shù)uint16_tTIM_CounterMode; //計(jì)數(shù)模式uint32_tTIM_Period; //定時(shí)器初值uint16_tTIM_ClockDivision; //分頻因子uint8_tTIM_RepetitionCounter; //重復(fù)計(jì)數(shù)}TIM_TimeBaseInitTypeDef;定時(shí)器生成PWM的編程要點(diǎn)4、定時(shí)器配置分析:設(shè)置TIMx定時(shí)器的相關(guān)寄存器,主要是設(shè)置ARR和PSC。例:產(chǎn)生頻率為500Hz,占空比為50%的PWM波形,可以設(shè)置如下:通用控制定時(shí)器時(shí)鐘源TIM3CLK=42MHz*2=84MHz,設(shè)定定時(shí)器頻率為=TIM3CLK/(TIM_Prescaler+1)=1MHz,得到:TIM_Prescaler=84-1而PWM的頻率為1MHz/(TIM_Period+1)=500Hz.則TIM_Period=2000即定時(shí)器從0計(jì)數(shù)到1999,為一個(gè)定時(shí)周期定時(shí)器生成PWM原理TIM_CounterMode_Up 向上計(jì)數(shù)

定時(shí)器生成PWM原理TIM_CounterMode_Down 向下計(jì)數(shù)

TIMx_ARRTIMx_CNT中斷定時(shí)器生成PWM的編程要點(diǎn)4、定時(shí)器配置TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Prescaler=84-1;//預(yù)分頻系數(shù)TIM_TimeBaseStructure.TIM_Period=2000-1;//定時(shí)器初值TIM_TimeBaseStructureTIM_CounterMode=TIM_CounterMode_Up;//計(jì)數(shù)模式TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//分頻因子TIM_RepetitionCounter=0; //重復(fù)計(jì)數(shù)TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置TIM_OCInitTypeDefTIM_OCInitStructure;typedefstruct{uint16_tTIM_OCMode; //輸出通道模式uint16_tTIM_OutputState; //輸出通道使能或失能uint16_tTIM_OutputNState; //輸出互補(bǔ)通道使能或失能uint32_tTIM_Pulse; //比較器預(yù)裝初值uint16_tTIM_OCPolarity; //輸出通道極性u(píng)int16_tTIM_OCNPolarity; //輸出互補(bǔ)通道極性u(píng)int16_tTIM_OCIdleState; //輸出通道空閑時(shí)電平uint16_tTIM_OCNIdleState; //輸出互補(bǔ)通道空閑時(shí)電平}TIM_OCInitTypeDef;定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(1)TIM_OCMode的取值范圍 //輸出通道模式TIM_OCMode_Timing //定時(shí)器輸出比較時(shí)間模式TIM_OCMode_Active //定時(shí)器輸出比較主動(dòng)模式TIM_OCMode_Inactive //定時(shí)器輸出比較非主動(dòng)模式TIM_OCMode_Toggle //定時(shí)器輸出比較觸發(fā)模式TIM_OCMode_PWM1 //定時(shí)器脈寬調(diào)制模式1TIM_OCMode_PWM2 //定時(shí)器脈寬調(diào)制模式2TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(1)TIM_OCMode的取值范圍 //輸出通道模式PWM模式1在遞增計(jì)數(shù)模式下,只要TIMx_CNT<TIMx_CCR1,通道1便為有效狀態(tài),否則為無(wú)效狀態(tài)。在遞減計(jì)數(shù)模式下,只要TIMx_CNT>TIMx_CCR1,通道1便為無(wú)效狀態(tài)(OC1REF=0),否則為有效狀態(tài)(OC1REF=1)。

PWM模式2在遞增計(jì)數(shù)模式下,只要TIMx_CNT<TIMx_CCR1,通道1便為無(wú)效狀態(tài),否則為有效狀態(tài)。在遞減計(jì)數(shù)模式下,只要TIMx_CNT>TIMx_CCR1,通道1便為有效狀態(tài),否則為無(wú)效狀態(tài)。TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(2)TIM_OutputState的取值范圍 //輸出通道使能或失能TIM_OutputState_Enable //輸出通道使能TIM_OutputState_Disable //輸出通道失能TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;(3)TIM_OutputNState取值范圍//輸出互補(bǔ)通道使能或失能TIM_OutputNState_Enable //輸出互補(bǔ)通道使能TIM_OutputNState_Disable //輸出互補(bǔ)通道失能

TIM3沒(méi)有互補(bǔ)通道,這個(gè)可以不設(shè)置定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(4)TIM_Pulse取值范圍//比較器預(yù)裝初值比較器初值取值0-65535,TIM2和TIM5比較器取值0-2^32設(shè)置占空比,占空比=(CCRx/ARR)*100%,設(shè)置50%的占空比為,前面已經(jīng)設(shè)置ARR=2000,因此這個(gè)地方的CCR應(yīng)該設(shè)置為100

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論