freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

六腳爬蟲機(jī)器人的機(jī)械結(jié)構(gòu)以及控制程序設(shè)計(jì)(編輯修改稿)

2025-07-20 00:42 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 特率的配置,對(duì)于PSCU板,其所需波特率為2400bps,(ZIGBEE)則需要9600bps,需對(duì)USART重新配置。而是否需要USART時(shí)鐘配置,則根據(jù)實(shí)際需要,如果單純是控制舵機(jī),時(shí)鐘配置這一段可省略。當(dāng)然在配置USART之前需要進(jìn)行兩項(xiàng)工作,首先和GPIO一樣需配置時(shí)鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE)。因?yàn)镾TM32板有多個(gè)USART串口,常用的有1~3,而USARTUSART3的時(shí)鐘配置不同于USART1,因?yàn)樗鼈冊(cè)贏PB1上,而后者在APB2上。應(yīng)如下配置:RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE)。配置完時(shí)鐘,便需配置GPIO口,U1在上節(jié)已配置,UU3的配置與U1一致,但是需要更換I/O口。具體見(jiàn)下表:USARTPINGPIOAFIOUSART1TXPA9PB6RXPA10PB7USART2TXPA2PD5RXPA3PD6USART3TXPB10PC10(PD8)RXPB11PC11(PD9) 串行通信GPIO口及復(fù)用GPIO口注:表中的AFIO列為復(fù)用I/O口配置完USART后,便是如何使用了,這包括數(shù)據(jù)發(fā)送和接收。㈠發(fā)送單個(gè)字節(jié)函數(shù)一:char ser_putbyte (char data) {USART_SendData(USART1, (unsigned char) data)。 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)。 USART1DR = (data amp。 0xFF)。 return (data)。} 函數(shù)二:int SendChar (int ch){ USART_SendData(USART1, (unsigned char) ch)。 while (!(USART1SR amp。 USART_FLAG_TXE))。 return (ch)。 }上述兩個(gè)函數(shù)的功能等同,在寫程序時(shí)可以隨意調(diào)用,()函數(shù)便調(diào)用了上述的函數(shù)一。㈡接收一個(gè)字節(jié)u8 RByte(void){ u8 out=0。 while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET){} //等待接收完畢 out = (USART_ReceiveData(USART1))。 //接收一個(gè)字節(jié) return out。 } 該函數(shù)用于接收單個(gè)字節(jié),在無(wú)線通信時(shí)可用到。㈢發(fā)送一個(gè)字符串void Print_String(u8 *p)//發(fā)送一串?dāng)?shù)據(jù) { while(*p) { USART_SendData(USART1, *p++)。 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) {} } } 當(dāng)連續(xù)發(fā)送的字符很多時(shí),可以選用該函數(shù)以字符串形式發(fā)送。㈣接收一個(gè)字符串void SerialIn(u8 *buf,u8 len){ unsigned char i。 for (i = 0。 i len。 i++) buf[i] = RByte()。 }同樣,當(dāng)需要連續(xù)發(fā)送多個(gè)字節(jié)數(shù)據(jù)時(shí),則可選用該函數(shù)。上面提到的都是USART1的設(shè)置以及拓展功能函數(shù)的書寫。而其它串口通信的設(shè)置與U1一致,功能函數(shù)則只需將U1換成U2或U3即可。由于主板的問(wèn)題,本項(xiàng)目中并未使用UU3來(lái)實(shí)現(xiàn)其它串口通信,而是將所有的串口通信均由U1來(lái)實(shí)現(xiàn),這也是權(quán)宜之計(jì),即采用分時(shí)復(fù)用的原理。具體說(shuō)來(lái),就是發(fā)聲傳感器和無(wú)線傳感器都需要通過(guò)異步傳輸來(lái)與處理器通信。對(duì)于每個(gè)傳感器以及PSCU,它們能夠識(shí)別的信號(hào)是由特定字符串組成的。這樣,只要將PAPA10口多引出幾個(gè)引腳,分別接到傳感器以及PSCU的相應(yīng)口即可,在傳輸指令時(shí),分時(shí)傳送,對(duì)于無(wú)法識(shí)別的字符串,則不處理,這樣便解決了串口不夠的問(wèn)題。如果要實(shí)現(xiàn)搶占,則將它們配置成中斷模式即可,并配置好優(yōu)先級(jí)。 外部中斷設(shè)置與應(yīng)用當(dāng)主控制板遇到異常時(shí),便會(huì)觸發(fā)中斷,并進(jìn)行處理。NVIC,中文叫做嵌套矢量中斷控制器,是用來(lái)處理中斷的對(duì)于STM32F107的普通用戶來(lái)說(shuō),只要掌握EXTI線中斷,USART中斷以及TIM中斷即可。下面僅對(duì)EXTI中斷作簡(jiǎn)略介紹。外部中斷/事件控制器(EXTI)由19個(gè)產(chǎn)生事件/中斷請(qǐng)求的邊沿檢測(cè)器組成。每個(gè)輸入線可獨(dú)立地配置輸入類型和對(duì)應(yīng)的觸發(fā)事件(上升沿、下降沿或雙邊沿觸發(fā))每個(gè)輸入線都可以被獨(dú)立地屏蔽,由掛起寄存器保持著狀態(tài)線的中斷要求。如果要產(chǎn)生外部中斷,首先必須配置好并激活中斷線。配置內(nèi)容包括:根據(jù)需要的邊沿檢測(cè)設(shè)置2個(gè)觸發(fā)寄存器、在中斷屏蔽寄存器的相應(yīng)位寫1以允許中斷請(qǐng)求。當(dāng)外部中斷線上出現(xiàn)設(shè)定的邊沿信號(hào)時(shí),將產(chǎn)生一個(gè)中斷請(qǐng)求等待處理。完成中斷服務(wù)后,可以清除該中斷請(qǐng)求。下面具體介紹如何配置硬件中斷/事件請(qǐng)求。(1)首先要了解中斷線與I/O口的關(guān)系,PA~PE的0~15口分別對(duì)應(yīng)EXTI的0~15口;EXTI16與PVD輸出連接、EXTI17與RTC鬧鐘事件連接、EXTI18與USB喚醒事件連接。 中斷線與GPIO口對(duì)應(yīng)關(guān)系(2)對(duì)EXTI線配置,以EXTI0為例,配置函數(shù)如下:void NVIC_Configuration(void){ NVIC_InitTypeDef NVIC_InitStructure。 ①ifdef VECT_TAB_RAMNVIC_SetVectorTable(NVIC_VectTab_RAM,0x0)。 ②elseNVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0)。 ③endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1)。 ④ = EXTI0_IRQn。 ⑤ = 1。 ⑥ = 0。 ⑦ = ENABLE。 ⑧NVIC_Init(amp。NVIC_InitStructure)。 } ⑨①~③為中斷地址配置;④表示選擇優(yōu)先級(jí)1組,即占先式優(yōu)先級(jí)以1位數(shù)字表示,副優(yōu)先級(jí)以三位數(shù)字表示, 中斷優(yōu)先級(jí)分組⑤表示選用EXTI0中斷線,注意在有些教材中等號(hào)右邊為EXTI0_IRQChannel,但在實(shí)際操作中,可能無(wú)法編譯,應(yīng)寫成上面形式。如果是選用中斷線EXTI11,應(yīng)寫作EXTI15_10_IRQn;EXTI8則為EXTI9_5_IRQn。⑥為配置占先式優(yōu)先級(jí)(主優(yōu)先級(jí)):高占先式優(yōu)先級(jí)的中斷會(huì)打斷當(dāng)前的主程序/中斷程序運(yùn)行,即所謂的中斷嵌套。優(yōu)先級(jí)數(shù)值越大,優(yōu)先級(jí)越低。⑦為配置副優(yōu)先級(jí)(子優(yōu)先級(jí)):在占先式優(yōu)先級(jí)相同的情況下。在低副優(yōu)先級(jí)中斷運(yùn)行中,高副優(yōu)先級(jí)的中斷要等待已被響應(yīng)的低副優(yōu)先級(jí)中斷執(zhí)行結(jié)束后才能得到響應(yīng)—非搶斷式響應(yīng)(不能嵌套)。但如果同時(shí)這兩個(gè)中斷同時(shí)到達(dá),則先執(zhí)行中斷優(yōu)先級(jí)高的,執(zhí)行完后,再執(zhí)行低優(yōu)先級(jí)中斷;如果兩個(gè)中斷的所有優(yōu)先級(jí)均一樣,則哪個(gè)中斷先到達(dá),就先執(zhí)行哪個(gè)中斷。對(duì)于副優(yōu)先級(jí),數(shù)值越大,優(yōu)先級(jí)越低。(3)對(duì)中斷線進(jìn)行I/O口配置,每個(gè)中斷線對(duì)應(yīng)5個(gè)I/O口,所以在使用前,一定要先進(jìn)行I/O口配置。仍以EXTI0為例,由開(kāi)發(fā)板原理圖可知,PA0可直接配置為EXTI0中斷,無(wú)需電路設(shè)計(jì)。如有需要,配置其它中斷。 PA0中斷線電路配置程序?yàn)椋簐oid EXTI_Configuration(void){ EXTI_InitTypeDef EXTI_InitStructure。 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0)。 ① = EXTI_Line0。 ② = EXTI_Mode_Interrupt。 = EXTI_Trigger_Falling。 ③ = ENABLE。 EXTI_Init(amp。EXTI_InitStructure)。 }①即表示選用PA0配置中斷;②表示中斷線為EXTI0。③表示下降沿觸發(fā)中斷。(4)配置中斷處理程序外部中斷關(guān)鍵在于使用,下面為通過(guò)EXTI0中斷來(lái)控制LED燈的程序:void EXTI0_IRQHandler(void){ if(EXTI_GetITStatus(EXTI_Line0)!= RESET) { ledflash()。 //LED閃爍函數(shù), EXTI_ClearITPendingBit(EXTI_Line0)。 //清除中斷屏蔽位 } } 只要改變ledflash()行,即可在中斷產(chǎn)生時(shí),進(jìn)入不同的中斷處理程序。由此多配置幾個(gè)中斷線,并配合行走程序,便可設(shè)計(jì)一個(gè)手柄(或控制面板)來(lái)控制使機(jī)器人完成前進(jìn)后退等動(dòng)作。 在開(kāi)發(fā)板上還配備一個(gè)PC13的中斷引腳,其電路圖與PA0一致,但是在調(diào)試過(guò)程中卻出現(xiàn)了bug,無(wú)法調(diào)通。雖然沒(méi)有進(jìn)行任何重映射,但程序中必須加入AFIO使能這一行,PC13的中斷程序才能執(zhí)行。在調(diào)試過(guò)程中需要注意這一點(diǎn)。 系統(tǒng)時(shí)鐘與定時(shí)器設(shè)置與應(yīng)用CortexM3 的內(nèi)核中包含一個(gè)4 位的遞減計(jì)數(shù)器——SysTick 時(shí)鐘。當(dāng)設(shè)定了SysTick的初值并使能后,每經(jīng)過(guò) 1 個(gè)系統(tǒng)時(shí)鐘周期,計(jì)數(shù)值就減 1。當(dāng)計(jì)數(shù)到 0 時(shí),SysTick 計(jì)數(shù)器便自動(dòng)重裝初值并繼續(xù)計(jì)數(shù),同時(shí)內(nèi)部的 COUNTFLAG 標(biāo)志會(huì)置位,觸發(fā)中斷 (如果中斷使能情況下)。由此,可以利用Systick的上述特點(diǎn),來(lái)編寫Delay()函數(shù),來(lái)實(shí)現(xiàn)精確延遲。系統(tǒng)時(shí)鐘為 72MHz,SysTick 的最高頻率為9MHz(最大為HCLK / 8),那么每次計(jì)數(shù)器減1 所用的時(shí)間是1/9M,計(jì)數(shù)器的初值如果是9,那么每次計(jì)數(shù)器減到0,時(shí)間經(jīng)過(guò)(1/9M) * 9= ,即1μs。首先書寫延遲的初始化程序:void delay_init(char SYSCLK) { SysTickCTRL amp。= 0xfffffffb。 ① fac_us = SYSCLK / 8。 ② fac_ms = (int)fac_us * 1000。 ③ fac_s = (int)fac_ms * 1000。 } ④①根據(jù)STK控制寄存器知,將0~2位設(shè)置成3,16位設(shè)置為1,則意味著:開(kāi)啟Systick功能、開(kāi)啟Systick中斷、使用HCLK/8作為Systick時(shí)鐘、上次讀取本寄存器后,Systick已經(jīng)數(shù)到了0;②根據(jù)①選用的時(shí)鐘書寫,調(diào)用時(shí)應(yīng)寫作delay_init(72);③、④可根據(jù)需要書寫。然后書寫延遲程序,以毫秒延遲為例:void delay_ms(int nms) { //毫秒級(jí)延遲 u32 temp。 SysTickLOAD = (u32)nms * fac_ms。 //load the time SysTickVAL = 0x00。 //clear the counter SysTickCTRL = 0x01 。 //start the counter do { temp = SysTickCTRL。 } while(temp amp。 0x01 amp。amp。 !(temp amp。 (116)))。//wait for the time SysTickCTRL = 0x00。 //close the counter SysTickVAL = 0X00。 //clear the counter }該程序即是指當(dāng)計(jì)數(shù)到設(shè)定值后,Systick的第16位控制位會(huì)自動(dòng)清零,從而使函數(shù)結(jié)束,停止計(jì)數(shù),達(dá)到精確延時(shí)的目的。在實(shí)際應(yīng)用中,當(dāng)配置了延遲秒級(jí)的函數(shù)時(shí),同樣會(huì)出現(xiàn)問(wèn)題,可能是計(jì)數(shù)器溢出,無(wú)法延遲到設(shè)定值,此時(shí)不妨將原先的函數(shù)分多段書寫,例如如果需要延遲10s,可以寫兩行delay_s(5)。 定時(shí)器配置STM32F10x處理器內(nèi)部有4個(gè)定時(shí)器,其中TIM1為高級(jí)控制定時(shí)器,TIMTIM3和TIM4為3個(gè)獨(dú)立的通用定時(shí)器。通用定時(shí)器是一個(gè)可編程預(yù)分頻器驅(qū)動(dòng)的16位自動(dòng)裝載計(jì)數(shù)器,適用于多種場(chǎng)合。通用定時(shí)器是完全獨(dú)立地,它們可以一起同步工作。以配置TIM2為例,其程序如下:void TIM2_Configuration(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure。 = 0xffff。 ① = 71。 ② = 0x0。 ③ = TIM_CounterMode_Up。 ④ TIM_TimeBaseInit(TIM2, amp。TIM_TimeBaseStructure)。 }
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1