32位嵌入式综合性实验报告姓名:学号:专业:授课老师:目录一串口回显功能 (1)二AD 采集传送功能............................................................................................................................3 三0.5s 延时计数................................................................................................................................... 8 四200MS 通用定时器计数................................................................................................................11 五100MS 流水灯闪烁........................................................................................................................15 六外部中断.........................................................................................................................................18 课程感想.. (22)一、串口回显功能1.1 实验目的编程实现开发板与PC 的串口通信功能。
即使用串口调试助手向开发板发送一个字节,开发板接收到该字节后再将该字节传回到串口调试助手。
1.2 实验步骤(1)建立开发环境;(2)新建工程,添加75x_lib.c,75x_uart.c,75x_mrcc.c,75x_eic.c,75x_gpio.c 文件;(3)编程:定义变量,设置系统时钟、GPIO 端口、UART0 端口、设置中断;(4)将程序下载到开发板,在PC 端用串口调试助手向开发板发送数值,观察串回显数值。
1.3 关键代码#include "75x_lib.h"#define TxBufferSize(countof(TxBuffer) - 1)#define RxBufferSize0x20#define countof(a)(sizeof(a) / sizeof(*(a)))void Delay(uint16_t);UART_InitTypeDefUART_InitStructure;charche;ErrorStatus OSC4MStartUpStatus; voidMRCC_Configuration(void); voidGPIO_Configuration(void); voidEIC_Configuration(void); int main()var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;{#ifdef DEBUG debug();#endifMRCC_Configuration(); GPIO_Configuration();UART_InitStructure.UART_WordLength = UART_WordLength_8D; UART_InitStructure.UART _StopBits = UART_StopBits_1; UART_InitStructure.UART_Parity = UART_Parity_Odd UART _InitStructure.UART_BaudRate = 115200; UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx; UART_InitStructure.UART_FIFO = UART_FIFO_Enable;UART_InitStructure.UART_TxFIFOLevel = UART_FIFOLevel_1_2;UART_InitStructure.UAR T_RxFIFOLevel = UART_FIFOLevel_1_8;UART_Init(UART0, &UART_InitStructure); che =uart_getchar (UART1); printf("%c\n\n",che);UART_ITConfig(UART0, UART_IT_Receive, ENABLE); UART_ITConfig(UART0, UART_IT_ Transmit, ENABLE); EIC_Configuration();UART_Cmd(UART0, ENABLE); while (1); }voidMRCC_Configuration(void) {MRCC_DeInit();OSC4MStartUpStatus = MRCC_WaitForOSC4MStartUp(); if(OSC4MStartUpStatus == SUCCE SS) {MRCC_HCLKConfig(MRCC_CKSYS_Div2); MRCC_CKTIMConfig(MRCC_HCLK_Div1); M RCC_PCLKConfig(MRCC_CKTIM_Div1);MRCC_CKSYSConfig(MRCC_CKSYS_OSC4MPLL, MRCC_PLL_Mul_15);}MRCC_IOVoltageRangeConfig(MRCC_IOV oltageRange_3V3);MRCC_PeripheralClockConfig( MRCC_Peripheral_UART0 |MRCC_Peripheral_GPIO, ENABLE); }voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin= GPIO _Pin_11; GPIO_Init(GPIO0, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIO0, &GPIO_InitStructure); }voidEIC_Configuration(void) {EIC_IRQInitTypeDefEIC_IRQInitStructure;EIC_IRQInitStructure.EIC_IRQChannel = UART0_IRQChannel; EIC_IRQInitStructure.EIC_IR QChannelPriority = 1;EIC_IRQInitStructure.EIC_IRQChannelCmd = ENABLE; EIC_IRQInit(&EIC_IRQInitStructure); EIC_IRQCmd(ENABLE); }1.4 实验结果使用串口调试助手向开发板发送一个数据后,开发板会将此数据回传至串口调试助手。
现象如图1.1 所示。
图 1.1 串口回显二、AD 采集传送功能2.1 实验目的利用控制器自带的AD,采集变阻器上的电压值,将采集到的数据经过简单的平滑滤波后显示到数码管上,并通过串口传回到串口调试助手。
2.2 实验步骤(1)建立开发环境;(2)新建工程,添加75x_adc.c,75x_cfg.c,75x_uart.c,75x_mrcc.c,75x_eic.c,75x_lib.c,75x_rtc.c,75x_gpio.c 文件。
(3)编程:定义变量,宏定义数码管的段选功能,设置系统时钟、GPIO 端口、UART0端口,设置中断、计时器,编写相关子函数。
(4)将程序下载到开发板,运行程序,转动变阻器,观察数码管显示的数值,并观察串口调试助手的回显数值。
2.3 关键代码#include "75x_lib.h"u8 ADC10,ADC1; u16adc_filter_cnt; u16adcdata,adc_result;#define SA0x0400#define SB0x0080#define SC0x0040#define SD0x0010#define SE0x0020 #defineSF0x0008#define SG0x0100#define SH0x0200#define Digit_0SA | SB | SC | SD | SE | SF#define Digit_1SB | SC#define Digit_2SA | SB| SD | SE| SG #define Digit_3SA | SB | SC | SD| SG #define Digit_4SB | SC| SF | SG #define Digit_5SA| SC | SD| SF | SG #define Digit_6SA| SC | SD | SE | SF | SG #define Digit_7SA | SB | SC#define Digit_8SA | SB | SC | SD | SE | SF | SG#define Digit_9SA | SB | SC | SD| SF | SG #define Digit_A SA | SB | SC| SE | SF | SG#define Digit_B SC | SD | SE | SF | SG#define Digit_C SA| SD | SE | SF#define Digit_D SB | SC | SD | SE| SG #define Digit_E SA| SD | SE | SF | SG#define Digit_F SA| SE | SF | SG #define Digit_SP 0const u16DigitTab[] = {Digit_0,Digit_1,Digit_2,Digit_3,Digit_4,Digit_5,Digit_6,Digit_7,Digit_8,Digit_9,Digit_A,Digit_B,Digit_C,Digit_D,Digit_E,Digit_F,Digit_SP};GPIO_InitTypeDef GPIO_InitStructure ;EXTIT_InitTypeDef EXTIT_InitStructure;UART_InitTypeDef UART_InitStructure;ADC_InitTypeDef ADC_InitStructure;void EIC_Configuration(void);void MRCC_Configuration(void);void GPIO_Configuration(void);void Display(u8 Digit,u8 position);ErrorStatusOSC4MStartUpStatus01; voidmain(void) {#ifdef DEBUGdebug();#endif/* Initialize the demonstration application */EIC_Configuration();MRCC_Configuration();GPIO_Configuration();TIM_SetPrescaler(TIM0, 0X3E7);TIM_SetPeriod(TIM0, 0xEA5F);TIM_ITConfig(TIM0, TIM_IT_Update, ENABLE);TIM_Cmd(TIM0, ENABLE);ADC_InitStructure.ADC_ConversionMode=ADC_ConversionMode_Scan;ADC_InitStructure.ADC_ExtTrigger=ADC_ExtTrigger_Disable;ADC_InitStructure.ADC_AutoClockOff=ADC_AutoClockOff_Disable;ADC_InitStructure.ADC_SamplingPrescaler=7;ADC_InitStructure.ADC_ConversionPrescaler=7;ADC_InitStructure.ADC_FirstChannel=ADC_CHANNEL14;ADC_InitStructure.ADC_ChannelNumber=1;ADC_Init(&ADC_InitStructure);ADC_ITConfig(ADC_IT_EOC, ENABLE);ADC_Cmd(ENABLE);ADC_StartCalibration(ADC_CalibAverage_Enable);ADC_ConversionCmd(ADC_Conversion_Start); UART_InitStructure.UART_WordLength = UART_WordLength_8D;UART_InitStructure.UART_StopBits = UART_StopBits_1;UART_InitStructure.UART_Parity = UART_Parity_Odd ;UART_InitStructure.UART_BaudRate = 115200;UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None; UART_InitStructure.UART_Mode = UART_Mode_Tx;UART_InitStructure.UART_FIFO = UART_FIFO_Enable;UART_Init(UART0, &UART_InitStructure);UART_Cmd(UART0, ENABLE);Display(14,1);while(1){Display(ADC10,0);Display(ADC1,1);}MRCC_Configuration(void) {MRCC_DeInit();OSC4MStartUpStatus01 = MRCC_WaitForOSC4MStartUp();if(OSC4MStartUpStatus01 == SUCCESS){MRCC_HCLKConfig(MRCC_CKSYS_Div1);MRCC_CKTIMConfig(MRCC_HCLK_Div1);MRCC_PCLKConfig(MRCC_CKTIM_Div2);CFG_FLASHBurstConfig(CFG_FLASHBurst_Enable);MRCC_CKSYSConfig(MRCC_CKSYS_OSC4MPLL,MRCC_PLL_Mul_15); }MRCC_IOVoltageRangeConfig(MRCC_IOV oltageRange_3V3);MRCC_PeripheralClockConfig(MRCC_Peripheral_GPIO, ENABLE);MRCC_PeripheralClockConfig(MRCC_Peripheral_ADC, ENABLE);MRCC_PeripheralClockConfig(MRCC_Peripheral_TIM0, ENABLE);MRCC_PeripheralClockConfig(MRCC_Peripheral_EXTIT, ENABLE);MRCC_PeripheralClockConfig(MRCC_Peripheral_UART0, ENABLE);} voidGPIO_Configuration(void){/* Configure COM1 and COM2 */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_1;GPIO_Init(GPIO0,&GPIO_InitStructure);/* Configure LedDigit Pins */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3;GPIO_Init(GPIO1, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_Init(GPIO0,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_Init(GPIO1,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11;GPIO_Init(GPIO0, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_Init(GPIO0, &GPIO_InitStructure);} void Display(u8 Digit,u8position)GPIO0->PD &= 0xFFF0;Digit &= 0x0F;GPIO_Write(GPIO1, DigitTab[Digit]);if (position == 0)GPIO0->PD |= 0x0004;// P02= COMM of digit 10 elseGPIO0->PD |= 0x0002;// P01= COMM of digit 1for(i=0; i<0x100; i++);} voidEIC_Configuration(void) {EIC_IRQInitTypeDef EIC_IRQInitStructure;EIC_IRQInitStructure.EIC_IRQChannel = TIM0_UP_IRQChannel;EIC_IRQInitStructure.EIC_IRQChannelPriority = 3;EIC_IRQInitStructure.EIC_IRQChannelCmd = ENABLE;EIC_IRQInit(&EIC_IRQInitStructure);EIC_IRQInitStructure.EIC_IRQChannel = ADC_IRQChannel;EIC_IRQInitStructure.EIC_IRQChannelPriority = 10;EIC_IRQInit(&EIC_IRQInitStructure);EIC_IRQCmd(ENABLE);}2.4 实验结果数码管示值为变阻器的阻值,并且将相同阻值回显到串口调试助手,转动变阻器后,数码管示值相应改变,实验现象如下图所示,可见实验现象与实验目标相符。