嵌入式技術(shù)與應用開發(fā)項目教程(STM32版)習題答案_第1頁
嵌入式技術(shù)與應用開發(fā)項目教程(STM32版)習題答案_第2頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式技術(shù)與應用開發(fā)項目教程(STM32版)習題答案 4 F 是 或 )引腳數(shù)目(第一個T 是 C 是 R 是 V 是 Z 是 X4 是6 是8 是B 是C 是、D 是E 是;H 是T 是U 是Y 是;(7 Y6 C、7 00。 1 3 和 和STM32F10 x_StdPeriph_Driver 2 和 和LibrariesCMSISCM3CoreSupport3在 3 在 3 在 3 、和。和stm32f10 x_conf.h 建4 個 和 和 ” 3 然 后 把 官 方 固 件 庫 “ ” 下 面 的 3 個 文 件 是; 在 在 和往 和在 和 在 在 2 個 2 1 個 的 1415

2、16172021222341424344454649507NRST10112425373839405152532PA8PA910010026272855565758596162293033343536PB0PB1PB2PB3PB4PB5PB6PB75654OSCIN_PD0OSCOUT_PD1PD2LEDYELLOWLEDYELLOWPB8PB91VBAT60BOOT0STM32F103R632個#include stm32f10 x.hvoid Delay(unsigned int count)延時函數(shù)unsigned int i;for(;count!=0;count-)i=5000;wh

3、ile(i-);int main(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /使能 GPIOB時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; /PB8PB9引腳配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /配置 PB8、PB9為推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz

4、;GPIO_Init(GPIOB, &GPIO_InitStructure);/GPIOB速度為 50MHz初始化 PB8、PB9GPIO_SetBits(GPIOB,GPIO_Pin_8);/PB8PB9輸出高電平,LED熄滅while(1)GPIO_ResetBits(GPIOB,GPIO_Pin_8);GPIO_SetBits(GPIOB,GPIO_Pin_9);Delay(100);/PB8輸出低電平,LED1點亮/PB9輸出高電平,LED2熄滅/延時,保持點亮一段時間/PB8輸出高電平,LED1熄滅/PB9輸出低電平,LED2點亮/保持熄滅一段時間GPIO_SetBits(GPIOB

5、,GPIO_Pin_8);GPIO_ResetBits(GPIOB,GPIO_Pin_9);Delay(100); 的 的 8 ;。 2 個 和。2 G8 位 8 位 的 4 。GPIOC-CRL&=0XFFF0FFFF;GPIOC-CRL|=0X00030000;GPIOC-CRH&=0XFFFF0FFF;GPIOC-CRH|=0X00008000;GPIOC-ODR=1ODR = 0 x0f38; 和 的 和 /PB7輸出低電平 , /PB7輸出低電平/PB8輸出高電平 位 位 1或2FAULTMASK和33123 3 2 8 個 8個8個U114151617202122234142434

6、4457PA0WKUPPA1PA2PA3PA4PA5PA6PA7PA889PC0PC1PC2PC3PC4PC5PC6PC7PC8PC9PC10PC11PC1210112425373839405152532PA9PA10PA11PA12PA13PA14PA15D6D5D4D3D2D1LEDREDLEDREDLEDREDLEDREDLEDREDLEDREDLEDRED5034R6R5R4R3R2R126272855565758596162293033343536PB0PB1PB2PB3PB4PB5PB6PB71001001001001001001001005654OSCIN_PD0OSCOUT_P

7、D1PD2PB8PB9PB10PB11PB12PB13PB14PB151VBAT60BOOT0STM32F103R68個#include stm32f10 x.huint16_t temp,i;void Delay(unsigned int count)/延時函數(shù)unsigned int i;for(;count!=0;count-)i=5000;while(i-);int main(void)初始化 GPIOA口的 PA18RCC-APB2ENR|=1CRL&=0X0000000F;GPIOA-CRH&=0XFFFFFFF0;GPIOA-CRL|=0X33333330;GPIOA-CRH|=

8、0X00000003;GPIOA-ODR|=0 x01FE;while(1)/使能 PORTA時鐘/清掉 PA17原來的設置/清掉 PA8原來的設置,同時不影響其它位設置/PA17推挽輸出/PA8推挽輸出/PA18輸出高GPIOA-ODR = 0 x0FFFE;temp = 0 x0FFFD;for(i=0;iODR = temp;Delay(100);temp = (temp1)+1;8個#include stm32f10 x.huint16_t temp,i;void Delay(unsigned int count)/延時函數(shù)unsigned int i;for(;count!=0;co

9、unt-)i=5000;while(i-);int main(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /使能 GPIOB時鐘GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;/PA1-PA8引腳配置配置 PA8為推挽輸出GPIO_InitStructure.GPIO

10、_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /GPIOA速度為 50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);初始化 PA1-PB8GPIO_Write(GPIOA,0 x01FE);/PA1-PA8輸出高電平,LED熄滅while(1)temp=0 x01FD;for(i=0;i8;i+)GPIO_Write(GPIOA,temp);Delay(100);temp=(temp1)+1; 8 。8 2 。 。 在 n 為=+4 8 個 (n=+4 8

11、 個 #define BITBAND(addr, bitnum) (addr & 0 xF0000000)+0 x2000000+(addr &0 xFFFFF)5)+(bitnum2); &;&; ;5 4 4 4 4。 4 (1 3-2 和2 #ifndef _SYS_H#define _SYS_H#include stm32f10 x.h/把“位帶地址位序號”轉(zhuǎn)換成位帶別名地址的宏#define BITBAND(addr, bitnum) (addr & 0 xF0000000)+0 x2000000+(addr&0 xFFFFF)5)+(bitnumAPB2ENR|=1CRH&=0XF

12、FFF0000;GPIOB-CRH|=0X03333333;GPIOB-ODR|=0 x0F00;while(1)/使能 PORTB時鐘/清掉 PB811原來的設置,同時不影響其它位設置/PB811推挽輸出/PB811輸出高temp=0 x0100;for(i=0;i4;i+)PBout(8)=0; PBout(9)=1; PBout(10)=1; PBout(11)=1;Delay(100);PBout(8)=1; PBout(9)=0; PBout(10)=1; PBout(11)=1;Delay(100);PBout(8)=1; PBout(9)=1; PBout(10)=0; PBou

13、t(11)=1;Delay(100);PBout(8)=1; PBout(9)=1; PBout(10)=1; PBout(11)=0;Delay(100); 徑和。 在 在 和和 1 和 和 1 1 /GPIO端口時鐘使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/復用的外設時鐘使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART2, ENABLE);/端口模式配置/USART1_TX、PA9復用推挽輸出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPI

14、O_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);/USART1_RX、PA10浮空輸入/PA9復用推挽輸出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;/PA10GPIO_InitStructure.GPIO_Mode = PIO_Mode_IN_FLOATING; /浮空輸入GPIO_Init(GPIOA, &GPIO_InitStructur

15、e); 如 1 4 ,1 4 。 2 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 5 和 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14;GPIO_InitStructure.GPIO_Speed = GPIO_Speed

16、_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOE, &GPIO_InitStructure);復用推挽輸出 個中斷,其中包含了 有 個 84 。 8 8 u8 k1=0;/k1=0跑馬燈停止,k1=1跑馬燈運行u8 KEY_Scan(void)if(KEY1=0)Delay(20);/延時,去抖動if(KEY1=0)/讀取 KEY1按鍵狀態(tài),判斷K1按鍵是否按下k1=k1;/KEY1按鍵按下,K1取反while(KEY1=0);/等待按鍵釋放return k1;/KEY_Scan()返回值 k1:1或 0

17、int main(void)unsigned int temp;u8 i,j;LED_Init();KEY_Init();while(1)/LED端口初始化/初始化與按鍵連接的硬件接口while(KEY_Scan()=0);GPIO_Write(GPIOD, 0);temp = 0 x0100;for(i=0;i4;i+)/先熄滅所有 LED/一個一個點亮,直至全部點亮向 GPIOD口寫控制碼GPIO_Write(GPIOD, temp);Delay(100);temp =(temp1)+0 x0100;while(KEY_Scan()=0);/左移一位加0 x0100獲得下一個控制碼/若 K

18、EY_Scan()=0,跑馬燈停止運行temp = 0 x0700;for(j=0;j1);while(KEY_Scan()=0); 和)和 0 4 4 重(2 ) 00 0 1 0 04(2 4 0 (2) 3 的 2 的 的 的和 和 的 和 和 和 和 的 和;和 的 的和 和 2 閃 用 2 和1#ifndef _TIMER_H#define _TIMER_H#include sys.hvoid TIM3_Int_Init(u16 arr,u16 psc);void TIM3_PWM_Init(u16 arr,u16 psc);#endif2 的 。 #include timer.h#

19、include led.h#include usart.h#define LED0 PBout(5)/ PB5#define LED1 PDout(5)/ PD8/通用定時器 3中斷初始化/這里時鐘選擇為 APB1的 2倍,而 APB1為 36M/arr:自動重裝值。psc:時鐘預分頻數(shù)void TIM3_Int_Init(u16 arr,u16 psc)TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_T

20、IM3, ENABLE); 時鐘使能/設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值,計數(shù)到 5000為 500msTIM_TimeBaseStructure.TIM_Period = arr;/設定計數(shù)器自動重裝值/設置用來作為 TIMx時鐘頻率除數(shù)的預分頻值,10Khz的計數(shù)頻率/預分頻器 7200,得到 10Khz的計數(shù)時鐘TIM_TimeBaseStructure.TIM_Prescaler =psc;設置時鐘分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TI

21、M_CounterMode = TIM_CounterMode_Up; /計數(shù)模式/根據(jù) TIM_TimeBaseInitStruct中指定的參數(shù)初始化 TIMx的時間基數(shù)單位TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/使能指定的 TIM3中斷,允許更新中斷TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;/TIM3中斷先占優(yōu)先級 0級NVIC_InitStructure.NVIC_IRQChannelPreempti

22、onPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;根據(jù) NVIC_InitStruct中指定的參數(shù)初始化外設 NVIC寄存器NVIC_Init(&NVIC_InitStructure);/從優(yōu)先級 3級/IRQ通道被使能TIM_Cmd(TIM3, ENABLE); /使能 TIMx外設/定時器 3中斷服務程序void TIM3_IRQHandler(void)中斷檢查指定的 TIM中斷發(fā)生與否:TIM中斷源if (TIM_

23、GetITStatus(TIM3, TIM_IT_Update) != RESET)TIM_ClearITPendingBit(TIM3, TIM_IT_Update);/清除中斷標志位LED1=!LED1;/TIM3的 PWM部分重映射初始化,PWM輸出初始化/arr:自動重裝值,psc:時鐘預分頻數(shù)void TIM3_PWM_Init(u16 arr,u16 psc)GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStr

24、ucture;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /使能定時器 3時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);使能 GPIO外設和 AFIO復用功能模塊時鐘/Timer3部分重映射 TIM3_CH2-PB5GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);設置該引腳為復用輸出功能,TIM3_CH2-PB5輸出 PWM脈沖波形GPIO_InitStructure.GP

25、IO_Pin = GPIO_Pin_5;設置 PB5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 復用推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);初始化 GPIO/初始化 TIM3/設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值TIM_TimeBaseStructure.TIM_Period = arr;/設置用來作為 TIMx時鐘頻率除數(shù)的預分頻值TIM_TimeBaseStructure.TIM_

26、Prescaler =psc;/設定計數(shù)器自動重裝值/預分頻器不分頻TIM_TimeBaseStructure.TIM_ClockDivision=0;/設置時鐘分割:TDTS=Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 計數(shù)模式根據(jù)上面指定的參數(shù)初始化 TIMx的時間基數(shù)單位TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/初始化 TIM3通道 2的 PWM模式/選擇定時器模式:TIM通道 2的 PWM2模式TIM_OCInitStructure.TIM_O

27、CMode = TIM_OCMode_PWM2;/比較輸出使能TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;/輸出極性:TIM輸出比較極性高TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;根據(jù)上面指定的參數(shù)初始化外設 TIM3 OC2TIM_OC2Init(TIM3, &TIM_OCInitStructure);/使能 TIM3在 CCR2上的預裝載寄存器TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);T

28、IM_Cmd(TIM3, ENABLE);使能 TIM3 ) #include key.h#include sys.h#include usart.h#include timer.hint main(void)u16 led0pwmval=0;u8 dir=1;delay_init();延時函數(shù)初始化NVIC_Configuration(); /設置 NVIC中斷分組 2:22位響應優(yōu)先級uart_init(9600);LED_Init();/串口初始化為 9600/LED端口初始化TIM3_PWM_Init(899,0); /不分頻。PWM頻率=72000/900=8Khzwhile(1)d

29、elay_ms(10);if(dir) led0pwmval+;else led0pwmval-;/控制 LED0由“暗”到“亮”/控制 LED0由“亮”到“暗”if(led0pwmval300) dir=0;if(led0pwmval=0) dir=1;/也可以:if(led0pwmval899) dir=0;/通過改變 TIM3-CCR2的值來改變占空比,從而控制 LED0的亮度TIM_SetCompare2(TIM3,led0pwmval); 4 33123 的的 ;891或2成 和4 3 和 和; 和 和; 和 和; 與的與的。 的 的 的的 和的 5 第6 1 TC 1 的 的的 #

30、ifndef _USART_H#define _USART_H#include sys.h#include stdio.h#define EN_USART2_RX 1extern u8 USART_RX_BUF64;extern u8 USART_RX_STA;/使能串口 2接收:使能“1”,禁止“0”/接收緩沖,最大 63個字節(jié).末字節(jié)為換行符/接收狀態(tài)標記extern void UART_Send_Str(char *s);extern int SendChar(int ch);void uart_init(u32 pclk2,u32 bound);#endif支持 printf函數(shù)代碼同

31、技能訓練 6-1一樣#ifdef EN_USART2_RXu8 USART_RX_BUF64;/如果使能了接收/接收緩沖,最大 64個字節(jié)./接收狀態(tài)標記。bit7:接收完成標志,bit6:接收到 0 x0d,bit50:接收到的有效字節(jié)數(shù)u8 USART_RX_STA=0; /收狀態(tài)標記/串口 2中斷服務程序。注意:讀取 USARTx-SR能避免莫名其妙的錯誤void USART2_IRQHandler(void)u8 res;if(USART2-SR&(1DR;if(USART_RX_STA&0 x80)=0)/接收未完成if(USART_RX_STA&0 x40)/接收到了 0 x0di

32、f(res!=0 x0a)USART_RX_STA=0;else USART_RX_STA|=0 x80;/接收錯誤,重新開始/接收完成了else/還沒收到 0X0Dif(res=0 x0d)USART_RX_STA|=0 x40;elseUSART_RX_BUFUSART_RX_STA&0X3F=res;USART_RX_STA+;/接收數(shù)據(jù)錯誤,重新開始接收if(USART_RX_STA63)USART_RX_STA=0;#endif/初始化 IO和串口 2。:PCLK2時鐘頻率(Mhz),bound:波特率,CHECK:OKvoid uart_init(u32 pclk2,u32 bou

33、nd)float temp;u16 mantissa;u16 fraction;temp=(float)(pclk2*1000000)/(bound*16);mantissa=temp;/得到 USARTDIV/得到整數(shù)部分/得到小數(shù)部分fraction=(temp-mantissa)*16;mantissaAPB2ENR|=1APB2ENR|=1CRH=0X444444B4;/使能 PORTA口時鐘/使能 USART2串口時鐘/IO狀態(tài)設置RCC-APB2RSTR|=1APB2RSTR&=(1BRR=mantissa;USART2-CR1|=0X200C;#ifdef EN_USART2_R

34、X使能接收中斷/波特率設置/1位停止,無校驗位./如果使能了接收USART2-CR1|=1CR1|=1SR & USART_FLAG_TXE);USART2-DR = (ch & 0 x1FF);return (ch);int GetKey(void)while (!(USART2-SR & USART_FLAG_RXNE);return (int)(USART2-DR & 0 x1FF);/UART_Send_Enter()函數(shù)代碼同技能訓練 6-1一樣/UART_Send_Str()函數(shù)代碼同技能訓練 6-1一樣/同技能訓練 6-1一樣int main(void)u8 t;u8 len;Stm32_Clock_Init(9);delay_init(72);uart_init(72,115200

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論