蓝桥杯竞赛板使用笔记(2)
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




