教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

蓝桥杯竞赛板使用笔记(2)

来源:网络收集 时间:2026-08-29
导读: GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);//key1 EXTI_InitStructure.EXTI_Line=EXTI_Line0; EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger =EXTI_Trig

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);//key1 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); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE; NVIC_Init(&NVIC_InitStructure);

void EXTI9_5_IRQHandler(void)//key2的中断函数,其他类似 {

if(EXTI_GetITStatus(EXTI_Line8) != RESET) {

delay_ms(10);//延时消抖,此函数用得是Systick的中断消抖,后面会讲

注意问题

if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0) { keyflag=1;//有按键按下的标志,按键处理函数中消除 key2flag=!key2flag;//具体按键的标志,具体按键处理后消除 } While(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0);//松手检测 EXTI_ClearITPendingBit(EXTI_Line8); } }

按键的处理函数略,主要就是先判断按键标志keyflag以判断是否有按键按下,若有再继续辨别具体按键标志,控制Led。

Take care之处:

1、使用外部中断需要打开复用时钟;

2、消抖。当进入中断服务函数之后,先判断对应中断线的标志是否置位(能进入则是置位了的),然后延时10ms后,使用if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0)此句读取对应按键相连的管脚是否被外部按键拉低,以实现消抖。然而我们知道,延时函数使用的是Systick,它是通过在滴答定时器中断中递减相应变量实现延时的,对systick的配置我们通常使用的是Cm3内核函数uint32_t SysTick_Configmy(uint32_t ticks);具体函数代码如下:

/* Initialise the system tick timer and its interrupt and start the * system tick timer / counter in free running mode to generate

* periodical interrupts. */

static __INLINE uint32_t SysTick_Config(uint32_t ticks) {

if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */

NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0

System Interrupts */

SysTick->VAL = 0; /* Load the SysTick Counter Value */

SysTick->CTRL=SysTick_CTRL_CLKSOURCE_Msk|SysTick_CTRL_TICKINT_Msk |

SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */

return (0); /* Function successful */

}

其中NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */这一句是对Systick抢占优先级中断的配置,这里配置的是7,最低,我们需要把它修改为NVIC_SetPriority (SysTick_IRQn, 1);抢占优先级为1(只要比按键的中断优先级高即可)。注意比赛时工程中所使用的内核文件代码不允许修改,只要把这个函数复制到用户文件中,函数名稍做修改再调用即可。此时按键消抖稳定。

六、 LCD

主要总结、记录一些对官方提供LCD驱动代码的使用方法

rtccounter=RTC_GetCounter(); sprintf(string,\`);

七、 ADC

Stm32f103rb内带2个12位的ADC(2个ADC的通道0~15在管脚上完全重合),每个ADC具有16个外部通道,时钟频率不能超过14M,竞赛板的ADC12的通道8(Pb0)与一个电位器相连接,所以在这里配置ADC的通道8为单通道连续转换模式,对ADC的配

置如下:

ADC_InitTypeDef ADC_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div8); //分频:72M/8=9MHz …… 此处隐藏:446字,全部文档内容请下载后查看。喜欢就下载吧 ……

蓝桥杯竞赛板使用笔记(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/614120.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)