论坛» 高校专区» 漓东e学堂

【1.18更新】09号【作业本】

菜鸟
2016-01-19 14:05 1楼

作业一:Keil安装:http://forum.eepw.com.cn/thread/279147/1#2

作业二:流水灯:http://forum.eepw.com.cn/thread/279147/1#3

作业三:0~99按键计数:http://forum.eepw.com.cn/thread/279147/1#4

作业四:uart控制流水灯http://forum.eepw.com.cn/thread/279147/1#5

作业五:用定时器控制LED:http://forum.eepw.com.cn/thread/279147/1#6

作业六:计算开机次数:http://forum.eepw.com.cn/thread/279147/1#7

作业七:DS18B20测温:http://forum.eepw.com.cn/thread/279147/1#8

菜鸟
2016-01-19 14:07 2楼

步骤一:找到安装文件点击进入安装界面

步骤二:安装页面的操作

继续下一步操作:

下一步操作不勾选两个空格:

步骤四:完成安装后点开该软件

点击File/License Management就出现下面这个界面

然后复制其中的CID!

步骤五:点开破解软件把CID粘贴进去点击最下边箭头的按钮获取激活码!

多点几次如下:

步骤六:返回软件复制CID的位置

把上步骤复制的激活码复制进该见面然后ADD

完成激活后如下:


菜鸟
2016-01-19 14:09 3楼

/**
******************************************************************************
* @file GPIO/IOToggle/main.c
* @author MCD Application Team
* @version V3.5.0
* @date 08-April-2011
* @brief Main program body.
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
*

© COPYRIGHT 2011 STMicroelectronics


******************************************************************************
*/

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32_eval.h"

GPIO_InitTypeDef GPIO_InitStructure;

void RCC_Configuration(void)
{
RCC_DeInit();

RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);

RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);

RCC_HSEConfig(RCC_HSE_OFF);
RCC_LSEConfig(RCC_LSE_OFF);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); // 72HMz
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}

void delay_us(u32 n)
{
u8 j;
while(n--)
for(j=0;j<10;j++);
}
void delay_ms(u32 n)
{
while(n--)
delay_us(1000);
}

/**
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{ unsigned char flag=0;

RCC_Configuration();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);



while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0);
GPIO_SetBits(GPIOC,GPIO_Pin_1);
GPIO_SetBits(GPIOC,GPIO_Pin_2);
GPIO_SetBits(GPIOC,GPIO_Pin_3);
GPIO_SetBits(GPIOC,GPIO_Pin_4);
GPIO_SetBits(GPIOC,GPIO_Pin_5);
GPIO_SetBits(GPIOC,GPIO_Pin_6);
GPIO_SetBits(GPIOC,GPIO_Pin_7);



delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_0);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_1);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_2);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_3);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_4);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_4);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_5);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_6);
delay_ms(100);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
delay_ms(100);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
delay_ms(100);

}
}

菜鸟
2016-01-19 14:10 4楼

0~99按键计数:

GPIO_InitTypeDef GPIO_InitStructure; // 声明一个结构体


void RCC_Configuration(void);
void GPIO_INIT(void) ;
void Function(void) ;

int main(void)
{
RCC_Configuration();
GPIO_INIT();
Function();
}

void RCC_Configuration(void) //复位所有的RCC外围设备寄存器
{
ErrorStatus HSEStartUpStatus; // 设置错误标志量
RCC_DeInit(); //复位RCC模块的寄存器,复位成缺省值
RCC_HSEConfig(RCC_HSE_ON); //开启HSE时钟
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //获取HSE启动状态:
if(HSEStartUpStatus==SUCCESS) //如果HSE启动成功
{
FLASH_PrefetchBufferCmd(ENABLE); //开启FLASH的预取功能
FLASH_SetLatency(FLASH_Latency_2); //FLASH延迟2个周期
RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置HCLK,PCLK2,PCLK1,PLL
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); // 72HMz
RCC_PLLCmd(ENABLE); //启动PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
{} //等待PLL启动完成
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟
while(RCC_GetSYSCLKSource() != 0x08); //检查是否将HSE 9倍频后作为系统时钟
}

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//改变管脚的映射SWJ使能选择用于事件输出的GPIO端口

/*蜂鸣器*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //使能所有要用APB2的外设时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //选中2引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 引脚频率50M
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //引脚设置推拉输出
GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIOD
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}

void delay_us(u32 n) //延时函数
{
u8 j;
while(n--)
for(j=0;j<10;j++);
}
void delay_ms(u32 n) //延时函数
{
while(n--)
delay_us(1000);
}

void GPIO_INIT(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB, ENABLE); //使能所有要用APB2的外设时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11; //选中8,9,10,11引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 引脚频率50M
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //引脚设置推拉输出
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_1|GPIO_Pin_15|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;//数码管
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 引脚频率50M
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化
}


void Number(int a) //数码管显示数字
{
switch(a)
{
case 0 : GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);break;
case 1 : GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);break;
case 2 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);break;
case 3 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);break;
case 4 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12);break;
case 5 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_14);break;
case 6 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);break;
case 7 : GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);break;
case 8 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);break;
case 9 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14); break;
}
}


void Function(void)
{
int i=0,j=0; //i被按下的次数,n延时变量

GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
delay_ms(50); //关闭数码管

while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_1); //打开个位数码管
Number(i); //用switch函数显示00
delay_ms(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_1); //关闭个位
GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);

GPIO_SetBits(GPIOB,GPIO_Pin_15); //打开十位
Number(j);
delay_ms(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_15); //关掉十位数码管
GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);

if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)) //判断按键是s1否被按下
{
delay_ms(50); //延时消抖
if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)) //再次判断按键是s1否被按下
{
i++; //按键被按下,个位+1
if(i==10)
{
j++;
i=0;
}
if(j==10)
{
j=0;
i=0;
}
}
}


菜鸟
2016-01-19 14:12 5楼

作业四:

#include "stm32f10x.h"

#include "stm32_eval.h"
#include "stdbool.h"
GPIO_InitTypeDef GPIO_InitStructure;
void RCC_Configuration(void);
void GPIO_INIT(void) ;
void Function(void) ;

int main(void)
{
RCC_Configuration();
GPIO_INIT();
Function();
}

void RCC_Configuration(void)
{
RCC_DeInit();
RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
RCC_HSEConfig(RCC_HSE_OFF);
RCC_LSEConfig(RCC_LSE_OFF);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); // 72HMz
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
}

void GPIO_INIT()
{
//GPIO数码管初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8
|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

//按键初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void delay_us(u32 n)
{
u8 j;
while(n--)
for(j=0;j<10;j++);
}

void delay_ms(u32 n)
{
while(n--)
delay_us(1000);
}
void Function(void)
{
int i=0,j=0; //i被按下的次数,n延时变量

GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
delay_ms(50); //关闭数码管

while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_1); //打开个位数码管
Number(i); //用switch函数显示00
delay_ms(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_1); //关闭个位
GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);

GPIO_SetBits(GPIOB,GPIO_Pin_15); //打开十位
Number(j);
delay_ms(50);
GPIO_ResetBits(GPIOB,GPIO_Pin_15); //关掉十位数码管
GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);

if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)) //判断按键是s1否被按下
{
delay_ms(50); //延时消抖
if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)) //再次判断按键是s1否被按下
{
i++; //按键被按下,个位+1
if(i==10)
{
j++;
i=0;
}
if(j==10)
{
j=0;
i=0;
}
}
}
}
}
/**
* @brief Main program.
* @param None
* @retval None
*/
菜鸟
2016-01-19 14:15 6楼

//作业五:

#include "stm32f10x.h"

#include "stm32_eval.h"
#include

EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
int count=0;

void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
}

void USART_int(long BaudRate)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

USART_InitStructure.USART_BaudRate = BaudRate;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
USART_ClockInit(USART1, &USART_ClockInitStructure);
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE);
}

void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

/* Private functions ---------------------------------------------------------*/


int main(void)
{


RCC_Configuration();

NVIC_Configuration();

TIM_TimeBaseStructure.TIM_Period = 36000;
TIM_TimeBaseStructure.TIM_Prescaler = 100;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );

TIM_Cmd(TIM2, ENABLE);

while (1){
}
}

void TIM2_IRQHandler(void) //TIM3
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update );

count++;
GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
if(count==1)
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
if(count==2)
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
if(count==3)
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
if(count==4)
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
if(count==5)
GPIO_ResetBits(GPIOC,GPIO_Pin_4);
if(count==6)
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
if(count==7)
GPIO_ResetBits(GPIOC,GPIO_Pin_6);
if(count==8)
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
if(count==9)
count=0;
}
}


#ifdef USE_FULL_ASSERT


void assert_failed(uint8_t* file, uint32_t line)
{

while (1)
{
}
}

#endif


#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */



PUTCHAR_PROTOTYPE
{

USART_SendData(EVAL_COM1, (uint8_t) ch);

while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
{}

return ch;
}

#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t* file, uint32_t line)
{

while (1)
{
}
}

#endif
菜鸟
2016-01-19 14:18 7楼

//定时器 5 通道 1 输入捕获配置

TIM_ICInitTypeDef TIM5_ICInitStructure;

void TIM5_Cap_Init(u16 arr,u16 psc)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //①使能 TIM5 时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //①使能 GPIOA 时钟

//初始化 GPIOA.0 ①

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0 设置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 输入

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.0

GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 下拉

//②初始化 TIM5 参数

TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频器

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式

TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //初始化 TIMx

//③初始化 TIM5 输入捕获通道 1

TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入端 IC1 映射到 TI1 上

TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获

TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到 TI1 上

TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频

TIM5_ICInitStructure.TIM_ICFilter = 0x00; //IC1F=0000 配置输入滤波器 不滤波

TIM_ICInit(TIM5, &TIM5_ICInitStructure); //初始化 TIM5 输入捕获通道 1

//⑤初始化 NVIC 中断优先级分组

NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; //TIM3 中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级 2 级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级 0 级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能

NVIC_Init(&NVIC_InitStructure); //初始化 NVIC

TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//④允许更新中断捕获中断

TIM_Cmd(TIM5,ENABLE ); //⑥使能定时器 5

}

u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态

u16 TIM5CH1_CAPTURE_VAL; //输入捕获值

//⑤定时器 5 中断服务程序

void TIM5_IRQHandler(void)

{

if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获

{

if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)

{

if(TIM5CH1_CAPTURE_STA&0X40) //已经捕获到高电平了

{

if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了

{

TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获了一次

TIM5CH1_CAPTURE_VAL=0XFFFF;

}else TIM5CH1_CAPTURE_STA++;

}

}

if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET) //捕获 1 发生捕获事件

{

if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿

{

TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次上升沿

TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);

TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //设置为上升沿捕获

}else //还未开始,第一次捕获上升沿

{

TIM5CH1_CAPTURE_STA=0; //清空

TIM5CH1_CAPTURE_VAL=0;

TIM_SetCounter(TIM5,0);

TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿

TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); //设置为下降沿捕获

}

}

}

TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位

}

//timer.h

extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态

extern u16 TIM5CH1_CAPTURE_VAL; //输入捕获值

int main(void)

{

u32 temp=0;

delay_init(); //延时函数初始化

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置 NVIC 中断分组 2

uart_init(115200); //串口初始化波特率为 115200

LED_Init(); //LED 端口初始化

TIM3_PWM_Init(899,0); //不分频。PWM 频率=72000/(899+1)=80Khz

TIM5_Cap_Init(0XFFFF,72-1); //以 1Mhz 的频率计数

while(1)

{

delay_ms(10);

TIM_SetCompare2(TIM3,TIM_GetCapture2(TIM3)+1);

if(TIM_GetCapture2(TIM3)==300)

TIM_SetCompare2(TIM3,0);

if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿

{

temp=TIM5CH1_CAPTURE_STA&0X3F;

temp*=65536;//溢出时间总和

temp+=TIM5CH1_CAPTURE_VAL;//得到总的高电平时间

printf("HIGH:%d us\r\n",temp); //打印总的高点平时间

TIM5CH1_CAPTURE_STA=0; //开启下一次捕获

}

}

}


菜鸟
2016-01-19 14:20 8楼
  1. //ADC改变灯的颜色:
  2. #include "stm32f10x.h"
  3. #include "stm32_eval.h"
  4. #include
  5. #define VREF 3.3
  6. GPIO_InitTypeDef GPIO_InitStructure;
  7. USART_InitTypeDef USART_InitStructure;
  8. USART_ClockInitTypeDef USART_ClockInitStructure;
  9. intvolt;
  10. unsignedinttemp0,temp1,temp2;
  11. voidRCC_Configuration(void)
  12. {/*
  13. RCC_DeInit();
  14. RCC_HSICmd(ENABLE);
  15. while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
  16. RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
  17. RCC_HSEConfig(RCC_HSE_OFF);
  18. RCC_LSEConfig(RCC_LSE_OFF);
  19. RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); // 72HMz
  20. RCC_PLLCmd(ENABLE);
  21. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  22. RCC_ADCCLKConfig(RCC_PCLK2_Div4);
  23. RCC_PCLK2Config(RCC_HCLK_Div1);
  24. RCC_PCLK1Config(RCC_HCLK_Div2);
  25. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  26. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  27. while(RCC_GetSYSCLKSource() != 0x08);
  28. */
  29. SystemInit();
  30. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
  31. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
  32. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
  33. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
  34. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  35. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  36. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  37. GPIO_Init(GPIOD, &GPIO_InitStructure);
  38. GPIO_ResetBits(GPIOD,GPIO_Pin_2);
  39. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
  40. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
  41. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  42. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  43. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  44. GPIO_Init(GPIOC, &GPIO_InitStructure);
  45. GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
  46. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  47. }
  48. voidUSART_int(longBaudRate)
  49. {
  50. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
  51. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  52. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  53. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  54. GPIO_Init(GPIOA, &GPIO_InitStructure);
  55. /* PA10 USART1_Rx */
  56. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  57. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  58. GPIO_Init(GPIOA, &GPIO_InitStructure);
  59. /* USARTx configured as follow:
  60. - BaudRate = 115200 baud
  61. - Word Length = 8 Bits
  62. - One Stop Bit
  63. - No parity
  64. - Hardware flow control disabled (RTS and CTS signals)
  65. - Receive and transmit enabled
  66. */
  67. USART_InitStructure.USART_BaudRate = BaudRate;
  68. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  69. USART_InitStructure.USART_StopBits = USART_StopBits_1;
  70. USART_InitStructure.USART_Parity = USART_Parity_No;
  71. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  72. USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
  73. USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
  74. USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
  75. USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
  76. USART_ClockInit(USART1, &USART_ClockInitStructure);
  77. USART_Init(USART1, &USART_InitStructure);
  78. USART_Cmd(USART1, ENABLE);
  79. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  80. USART_Cmd(USART1, ENABLE);
  81. }
  82. voiddelay_us(u32 n)
  83. {
  84. u8 j;
  85. while(n--)
  86. for(j=0;j<10;j++);
  87. }
  88. voiddelay_ms(u32 n)
  89. {
  90. while(n--)
  91. delay_us(1000);
  92. }
  93. voidPWM_Config()
  94. {
  95. uint16_t PrescalerValue = 0;
  96. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  97. TIM_OCInitTypeDef TIM_OCInitStructure;
  98. /* TIM2 clock enable */
  99. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  100. /* GPIOA enable */
  101. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  102. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//PWM&RGB- PA1 PA2 PA3
  103. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  104. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  105. GPIO_Init(GPIOA, &GPIO_InitStructure);
  106. TIM_Cmd(TIM2, ENABLE);
  107. /* Compute the prescaler value */
  108. PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
  109. /* Time base configuration */
  110. TIM_TimeBaseStructure.TIM_Period = 0x07FF;
  111. TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
  112. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  113. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  114. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  115. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  116. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  117. /* PWM1 Mode configuration: Channel2 ,PA1在通道2*/
  118. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  119. TIM_OCInitStructure.TIM_Pulse = 0xFFFF;
  120. TIM_OC2Init(TIM2, &TIM_OCInitStructure);
  121. /* PWM1 Mode configuration: Channel3 PA2在通道3*/
  122. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  123. TIM_OCInitStructure.TIM_Pulse = 0xFFFF;
  124. TIM_OC3Init(TIM2, &TIM_OCInitStructure);
  125. /* PWM1 Mode configuration: Channel4 PA3在通道4*/
  126. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  127. TIM_OCInitStructure.TIM_Pulse = 0xFFFF;
  128. TIM_OC4Init(TIM2, &TIM_OCInitStructure);
  129. TIM_ARRPreloadConfig(TIM2, ENABLE);
  130. }
  131. voidADC_CONFIG(){
  132. ADC_InitTypeDef ADC_InitStructure;
  133. #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
  134. /* ADCCLK = PCLK2/2 */
  135. RCC_ADCCLKConfig(RCC_PCLK2_Div2);
  136. #else
  137. /* ADCCLK = PCLK2/4 */
  138. RCC_ADCCLKConfig(RCC_PCLK2_Div4);
  139. #endif
  140. ADC_DeInit(ADC1);
  141. /* Enable ADC1 and GPIOC clock */
  142. RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB, ENABLE);
  143. /* Configure PB0 (ADC Channel14) as analog input -------------------------*/
  144. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//ADC所在端口PB0
  145. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入模式
  146. GPIO_Init(GPIOB, &GPIO_InitStructure);
  147. /* ADC1 configuration ------------------------------------------------------*/
  148. ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  149. ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  150. ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  151. ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  152. ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ADC数据右对齐
  153. ADC_InitStructure.ADC_NbrOfChannel = 1;//ADC通道数为1
  154. ADC_Init(ADC1, &ADC_InitStructure);//初始化ADC1
  155. /* Enable ADC1 DMA */
  156. ADC_DMACmd(ADC1, ENABLE);
  157. /* Enable ADC1 */
  158. ADC_Cmd(ADC1, ENABLE);
  159. }
  160. intGet_ADC(){
  161. /* ADC1 regular channel configuration */
  162. ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);//通道:8 ,采样时间
  163. /* Enable ADC1 reset calibration register */
  164. ADC_ResetCalibration(ADC1);//重置ADC1的校准寄存器
  165. /* Check the end of ADC1 reset calibration register */
  166. while(ADC_GetResetCalibrationStatus(ADC1));//确认重置完毕
  167. /* Start ADC1 calibration */
  168. ADC_StartCalibration(ADC1);
  169. /* Check the end of ADC1 calibration */
  170. while(ADC_GetCalibrationStatus(ADC1));
  171. /* Start ADC1 Software Conversion */
  172. ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  173. returnADC_GetConversionValue(ADC1);
  174. }
  175. voidPWM_TEST()
  176. {
  177. unsignedinttemp0=volt,temp1=0,temp2=volt;
  178. printf("PWM-RGB TEST......\r\n");
  179. for(;(temp0>0)||(temp1
  180. {
  181. TIM_SetCompare2(TIM2, temp0);//temp0:volt~0
  182. TIM_SetCompare3(TIM2, temp1);//temp1:0~volt
  183. delay_us(1000);
  184. }
  185. for(;(temp00);temp0++,temp2--)
  186. {
  187. TIM_SetCompare2(TIM2, temp0);//temp0:0~volt
  188. TIM_SetCompare4(TIM2, temp2);//temp2:volt~0
  189. delay_us(1000);
  190. }
  191. for(;(temp1>0)||(temp2
  192. {
  193. TIM_SetCompare4(TIM2, temp2);//temp2:0~volt
  194. TIM_SetCompare3(TIM2, temp1);//temp1:volt~0
  195. delay_us(1000);
  196. }
  197. }
  198. intmain(void)
  199. {
  200. floatVolt=0.00;
  201. intADValue = 0;
  202. RCC_Configuration();
  203. USART_int(115200);
  204. ADC_CONFIG();
  205. Get_ADC();
  206. PWM_Config();
  207. delay_ms(1000);
  208. printf(" config done...\r\n");
  209. while(1)
  210. {
  211. ADValue = Get_ADC();
  212. Volt = VREF*ADValue/4095;
  213. volt=Volt*1000;
  214. printf("===============================\r\n");
  215. printf("The ADC value is:%d\r\n",ADValue);
  216. printf("The Volt is:%f V\r\n",Volt);
  217. printf("The volt is:%d \r\n",volt);
  218. PWM_TEST();
  219. delay_ms(500);
  220. }
  221. }
  222. #ifdef USE_FULL_ASSERT
  223. voidassert_failed(uint8_t* file, uint32_t line)
  224. {
  225. while(1)
  226. {
  227. }
  228. }
  229. #endif
  230. #ifdef __GNUC__
  231. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  232. #else
  233. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  234. #endif /* __GNUC__ */
  235. PUTCHAR_PROTOTYPE
  236. {
  237. USART_SendData(EVAL_COM1, (uint8_t) ch);
  238. while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
  239. {}
  240. returnch;
  241. }
  242. #ifdef USE_FULL_ASSERT
  243. voidassert_failed(uint8_t* file, uint32_t line)
  244. {
  245. while(1)
  246. {
  247. }
  248. }
  249. #endif
工程师
2016-01-19 19:32 9楼
共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]