蓝桥杯嵌入式学习————时钟系统、lcd、按键

系统时钟

这里学习的是stm32的系统滴答时钟。

int main(void)
{   
    LED_Init();
    LED_Control(LEDALL,0);
    
    SysTick_Config(SystemCoreClock/1000);  //1ms中断一次 若10ms中断,则1000改为100 记住代码
 
    while(1){
		LED_Control(LED0,1);
		Delay_Ms(1000);  //1s
		LED_Control(LED0,0);
		Delay_Ms(1000);
    }          
}
// 延时函数,考试时记住
void Delay_Ms(uint32_t nTime)
{
    TimingDelay = nTime;
    while(TimingDelay != 0);
}

//中断延时处理函数,在stm32f10x_it.c里面
void SysTick_Handler(void)
{
	TimingDelay--;         //extern uint32_t TimingDelay;
}

lcd显示屏

采用库函数进行编程
需要将lcd.c添加到USER路径下,把lcd.h添加到inc路径下。

int main(void)
{   
    SysTick_Config(SystemCoreClock/1000);  //1ms中断一次

    //LCD工作模式配置
	STM3210B_LCD_Init();   //lcd初始化
	LCD_SetTextColor(White);    //设置字体颜色
	LCD_SetBackColor(Blue);     //设置背景颜色
	LCD_Clear(Blue);            //用蓝色清屏
	
    
	//显示 内容
	LCD_DisplayStringLine(Line0,"====================");
	LCD_DisplayStringLine(Line1,"+                  +");
	LCD_DisplayStringLine(Line2,"+ Welcome to GXCT  +");
	LCD_DisplayStringLine(Line3,"+                  +");
	LCD_DisplayStringLine(Line4,"+  LCD_ASCII DEMO  +");
	LCD_DisplayStringLine(Line5,"+                  +");
	LCD_DisplayStringLine(Line6,"+   www.baidu.net  +");
	LCD_DisplayStringLine(Line7,"+                  +");
	LCD_DisplayStringLine(Line8,"====================");
	LCD_DisplayStringLine(Line9,"====================");
   
    while(1);         
}

按键

按键io初始化使用的是GPIO_Mode_IPU 上拉输入、10MHz。

  • 此处解释一下上拉输入,指的是在按键到vcc之间连接上一个电阻,通常按键松开的情况下按键电路不同,输入的是高电压,当按下按键后,输入的是低电压,此时电阻起着保护电路防止短路的作用。

按键采用中断的方式进行检测,在此蓝桥杯开发板上4个按键从左向右对应的io口分别为PA0、PA8、PB1、PB2。

串一点外部中断的相关知识,使用外部中断时要使用 EXTI_Init(&EXTI_InitStructure) 函数进行初始化(函数在库文件stm32f10x_exti.c内),其中结构体为对外部中断线EXTI_Line、外部中断模式EXTI_Mode、中断触发方式EXTI_Trigger、中断使能EXTI_LineCmd进行配置。

  • EXTI_Line
    line0~18,其中0 ~ 15 为常用中断线,对应关系为每个端口位号与中断线相对应,例如PA4、PB4、PC4、PD4、PE4、PF4、PG4都是使用的是Line4.

  • EXTI_Mode
    EXTI_Mode_Interrupt为设置线路为中断请求方式 EXTI_Mode_Event为设置线路为事件请求方式

  • EXTI_Trigger
    EXTI_Trigger_Falling 下降沿触发
    EXTI_Trigger_Rising 上升沿触发
    EXTI_Trigger_Rising_Falling 上升下降沿触发

  • EXTI_LineCmd 定义线路状态。可以被设为 ENABLE 或者 DISABLE。

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource8);
作用,将引脚与对应的中断线连接起来

然后需要配置中断嵌套NVIC

需要设置优先级分组(只配置一次,通常设为分组2,则抢占优先级2位,从优先级2位)
后面每个中断需要设置:

  • 中断通道 NVIC_IRQChannel
  • 中断抢占优先级 NVIC_IRQChannelPreemptionPriority
  • 中断次优先级 NVIC_IRQChannelSubPriority
  • 状态(使能)NVIC_IRQChannelCmd

下面是按键1(GPIO_A0)的按键初始化配置

    EXTI_InitTypeDef   EXTI_InitStructure;
	GPIO_InitTypeDef   GPIO_InitStructure;
	NVIC_InitTypeDef   NVIC_InitStructure;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	/* Enable GPIOA clock */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  
	//PA0-BUTTON1
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	//connect pin to extiline
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);

	/* Configure EXTI0 line */
	EXTI_InitStructure.EXTI_Line = EXTI_Line0;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);

	/* Enable and set EXTI0 Interrupt to the lowest priority */
	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

第二课学习结束

你可能感兴趣的:(蓝桥杯嵌入式)