STM32简单例程调试
来源:互联网 发布:nesstool是什么软件 编辑:程序博客网 时间:2024/06/14 01:06
一、按键例程
key.c文件代码如下
按键初始化相当于GPIO口的配置。步骤:时钟设置,输入输出设置,IO口属性设置
#include <stm32f10x_lib.h>#include "key.h"#include "delay.h"//V1.1修改说明//修改按键扫描函数,使整个代码可以支持SWD下载。/////////////////////////////////////////////////////////////////按键初始化void KEY_Init(void){ RCC->APB2ENR|=1<<2; //使能PORTA时钟 RCC->APB2ENR|=1<<4; //使能PORTC时钟 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入 GPIOA->CRL|=0X00000008; GPIOC->CRH&=0XFFFF0000;//PC8,9,10,11设置成输入 GPIOC->CRH|=0X00008888; GPIOC->ODR|=1<<8; //PC8上拉,PA0默认下拉 GPIOC->ODR|=1<<9; //PC9上拉 GPIOC->ODR|=1<<10; //PC10上拉 GPIOC->ODR|=1<<11; //PC11上拉} //按键处理函数//返回按键值u8 KEY_Scan(void){ static u8 key_up=1;//按键按松开标志 // JTAG_Set(JTAG_SWD_DISABLE); if(key_up&&(WK_UP==1||KEY0==0||KEY1==0||KEY2==0||KEY3==0)) { delay_ms(10);//去抖动 key_up=0; if(KEY0==0) { return 1; } else if(KEY1==0) { return 2; } else if(KEY2==0) { return 3; } else if(KEY3==0) { return 4; } else if(WK_UP==1) { return 5; } }else if(WK_UP==0&&KEY0==1&&KEY1==1&&KEY2==1&&KEY3==1)key_up=1; return 0;// 无按键按下}
二、外部中断实验
EXTI.c 文件代码
外部终端0–4都有自己单独的中断函数,但是之后就分为两个公用中断函数5~9,10~15.
函数内部最后要就行清楚中断标志位,每个管脚对应一个EXTI->PR的一位。
//外部中断0服务程序
void EXTI0_IRQHandler(void){ delay_ms(10);//消抖 if(WK_UP==1) //按键2 { LED0=!LED0; LED1=!LED1; } EXTI->PR=1<<0; //清除LINE0上的中断标志位 }//外部中断5--9服务程序void EXTI9_5_IRQHandler(void){ delay_ms(10); //消抖 if(KEY0==0) //按键0 { LED0=!LED0; }else if(KEY1==0)//按键1 { LED1=!LED1; } EXTI->PR=1<<8; //清除LINE13上的中断标志位 EXTI->PR=1<<9; //清除LINE15上的中断标志位 }//外部中断初始化程序//初始化PA0,PA13,PA15为中断输入.void EXTIX_Init(void){ KEY_Init(); Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发 Ex_NVIC_Config(GPIO_C,8,FTIR);//下降沿触发 Ex_NVIC_Config(GPIO_C,9,FTIR);//下降沿触发 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2 MY_NVIC_Init(2,1,EXTI9_5_IRQChannel,2);//抢占2,子优先级1,组2 }
三、定时器
timer.c代码如下
#include "timer.h"#include "led.h"//定时器3中断服务程序 void TIM3_IRQHandler(void){ if(TIM3->SR&0X0001)//溢出中断 { LED1=!LED1; } TIM3->SR&=~(1<<0);//清除中断标志位 }//通用定时器中断初始化//这里时钟选择为APB1的2倍,而APB1为36M//arr:自动重装值。//psc:时钟预分频数//这里使用的是定时器3!void Timerx_Init(u16 arr,u16 psc){ RCC->APB1ENR|=1<<1;//TIM3时钟使能 TIM3->ARR=arr; //设定计数器自动重装值//刚好1ms TIM3->PSC=psc; //预分频器7200,得到10Khz的计数时钟 //这两个东东要同时设置才可以使用中断 TIM3->DIER|=1<<0; //允许更新中断 TIM3->DIER|=1<<6; //允许触发中断 TIM3->CR1|=0x01; //使能定时器3 MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2 }
0 0
- STM32简单例程调试
- STM32 USB Mass Storage 例程调试笔记
- STM32 USB Mass Storage 例程调试笔记
- STM32 USB Mass Storage 例程调试笔记
- STM32 USB Mass Storage 例程调试笔记
- stm32 GPIO 操作例程
- STM32-例程学习
- STM32之串口例程
- STM32之RTC例程
- stm32 sdio调试,修改官方例程bug,已成功调通SDIO读取SD卡
- STM32串口库函数版例程
- STM32跑马灯例程总结
- stm32 spi的测试例程
- stm32 can基础测试例程
- stm32 can总线参考例程
- STM32之外部中断例程
- STM32之串口DMA例程
- stm32调试
- 血泪安卓安装教程
- 设计模式之观察者模式(Observer)
- OpenCV2:imread 和 imwrite
- dwr + springMVC 后台推送
- 黑马程序员_iOS_C_整型变量在内存中所占字节数
- STM32简单例程调试
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- eclipse实用快捷键
- Ubuntu 15.10安装ns2.35+nam
- git教程
- 聊一聊MD5
- ios 数据持久化之自定义模型的存储
- 用于 VMware vSphere ESXi 4/5/6 的HP智能阵列B140i SATA RAID控制器驱动程序
- A tcpdump Primer with Examples