8.3 电容触摸例程现在pa1端口接一个触摸按键(一块铜箔),利用pa1的触摸按键控制pa0端口的led状态,按下时led点亮,抬起时led熄灭。(1)新建基础工程,并创建tpad.c,tpad.h,led.c和led.h文件,并导入工程,如下图所示。
(2)在tpad.h文件内添加以下代码。
(3)在led.h文件内添加以下代码
(4)在led.c文件中添加以下代码
(5)在tpad.c文件内添加以下代码
#include tpad.h#include delay.h/***************************************************name :tpad_get_valuefunction :触摸按键值获取paramater :nonereturn :获取的充电时间***************************************************/u16 tpad_get_value(){ //电容放电 gpioa->crl &= 0xffffff0f ; //pa1输入 gpioa->crl |= 0x00000030 ; //推挽输出 gpioa->odr &= ~( 1cnt = 0 ; //归零 gpioa->crl &= 0xffffff0f ; //pa1输入 gpioa->crl |= 0x00000040 ; //浮空输入 //等待捕获上升沿 while( ( tim5->sr&0x04 )==0 ) { if( tim5->cnt>( 65535-500 ) ) return tim5->cnt ; } return tim5->ccmr2 ;}/***************************************************name :tpad_get_maxvalfunction :触摸按键最大值获取paramater :nonereturn :获取的最大充电时间***************************************************/u16 tpad_get_maxval( u8 n ){ u16 temp=0; u16 res=0; while( n-- ) { temp = tpad_get_value() ; if( temp>res ) res = temp ; } return res ;}/***************************************************name :tpad_initfunction :触摸按键初始化paramater :nonereturn :none***************************************************/tpaddata tpad_data ;void tpad_init(){ u16 buff[ 10 ], temp ; u8 i, j ; rcc->apb2enr |= 1crl |= 0x00000040 ; //浮空输入 rcc->apb1enr |= 1psc = 5 ; tim5->ccmr1 |= 1
#include sys.h#include delay.h#include usart1.h#include led.h#include tpad.hint main(){ stm32_clock_init( 9 ) ; //stm32时钟初始化 systick_init( 72 ) ; //systick初始化 usart1_init( 72, 115200 ) ; //初始化串口1波特率115200 led_init() ; //led初始化 tpad_init() ; //触摸按键初始化 while( 1 ) { tpad_scan() ; //触摸按键扫描 if( tpad_data.state==1 ) { led = 0 ; tpad_data.state = 0 ; } else led = 1 ; }}——————————————分割线——————————————
8.4 stm32工程管理这里的总结是针对与之前所学的所有嵌入式内容进行总结,随着后续代码越来越多,对于工程的管理显得格外重要,不仅仅是采用本章节介绍的方法管理工程代码,对于后续的linux开发和操作系统移植也最好是按照固定的工程格式进行管理。
对于stm32的工程可以划分为以下几个部分:
(1)过程文件以及最终生成的hex文件:这些文件通通放置在工程1级目录下的object文件中,文件中的内容如下图所示。
图中标注部分就是最终生成的hex文件,其他的文件均属于过程文件,集成开发系统ide编译的实质其实就是采用gcc交叉编译器将我们编写的代码转换成对应的机器代码的过程,具体的步骤会在linux系统移植中描述,这里只需要知道利用交叉编译器进行编译的时候会产生大量的链接文件和过程文件,这些文件统统放置在object目录下。将工程文件中的过程文件放置在该目录下的设置方式如下图所示。
(2)主函数文件及主工程文件:在keil中创建的工程,以及包括main函数的c文件都位于这个目录内。
图中标注的3个文件都是必不可少的文件,带有keil图标的文件就是工程文件,里面包含了整个工程所需的头文件,文件路径以及编译器位置,文本文件图标的则是c文件,main函数就放在这个位置,.s后缀的为汇编启动文件,用于帮助芯片创建c代码运行环境,初始化堆栈等功能,为了达到最快效率,所以采用汇编语言来编写这个文件。
(3)自定义系统文件:自定义的系统文件位于system目录中,目录内有3个子目录,分别是sys,delay和usart1。
delay目录:是利用systick时钟来实现的延时功能,主要有毫秒级延时和微秒级延时;
usart1目录:则是利用串口1来实现printf打印输出的功能,主要用于调试数据的输出;
sys目录:是最基础的工程文件,这个目录内有1个c文件和2个h文件,c文件主要实现stm32时钟树的配置和中断系统的设置功能,是c函数中最重要的一个文件,stmxx.h文件则是最底层的寄存器定义文件,里面定义了stm32芯片内部所有寄存器的地址和结构,通过c语言来调用这里面的寄存器实现芯片的控制功能。
(4)驱动文件:驱动文件位于headerware目录中,用于存放项目所用到的驱动,比如之前实验所用到的led,key,tim这些外设都属于驱动文件内容。
至此整个工程的目录结构如下图所示。
基于NEC MCU的语音液晶触摸血压计
压敏电阻有正负极吗
HD是什么 和FHD与HD+的区别是什么
maxim推出通用型支持GLONASS的GPS接收机MAX2769B
TDK推出用于导电粘接安装的新型贴片NTC热敏电阻
STM32入门学习笔记之电容触摸实验(下)
特斯拉再创记录:不怕BBA,不虚布加迪
欧美日“领衔” 全球高端市场OLED占有率持续上升
ADI与伍兹霍尔海洋研究所成立海洋与气候创新加速器
ESP32应用教程— SD NAND(记录飞控LOG)
华为创新视讯产品解决方案 满足多样化客户需求
“客户至上”推动AWS持续精进,一直引领云计算市场发展
PCB设计人员如何确定SMT钢网的尺寸
英特尔即将发布的i9-11900K处理器现现身Geekbench
使用智能手环测血压到底靠不靠谱?
Kneron发表集成影音辨识的终端人工智能解决方案
SiC MOSFET的实时结温监控电路及其影响因素
刻录机规格
如何在节能建筑中进行照明设计
嵌入式系统的前瞻 前后台系统