刚开始学习stm32,学到触摸电容按键哪里,终于弄出来。现在分享给大家。
程序主要也是参考原子哥的。
[mw_shl_code=c,true]#include "dsq.h"
void DSQ_Init()
{
RCC->APB2ENR|=1<<1;
RCC->APB1ENR|=1<<3;
GPIOA->CRL&=0xffffff0f;
GPIOA->CRL|=0X00000040;
TIM5->ARR=0xffff;
TIM5->  SC=71;
TIM5->CCMR1|=3<<12; //
TIM5->CCMR1|=1<<8; //
TIM5->CCMR1|=0<<10;
TIM5->CCER|=1<<4; //?¨??2
TIM5->CCER|=0<<5; //??????
TIM5->DIER|=1<<2; //????2????
TIM5->DIER|=1<<0;
TIM5->CR1|=0x01;
MY_NVIC_Init(2,2,TIM5_IRQn,2);
}
void Gpiorest()
{
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0XFFFFFF0F;
GPIOA->CRL|=0X00000030;
GPIOA->ODR&=0<<1;
delay_ms(5);
TIM5->SR=0;
TIM5->CNT=0;
GPIOA->CRL&=0xffffff0f;
GPIOA->CRL|=0X00000040;
}
void Usartck_Init()
{
//?????¨????9600
float data_jsz;
u16 btl,xiaoshu;
data_jsz=(float)(7500/16);
btl=data_jsz;
xiaoshu=(data_jsz-btl)*16;
btl<<=4;
btl+=xiaoshu;
RCC->APB2ENR|=1<<14;
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0xffff00ff;
GPIOA->CRL|=0X00008B00;
RCC->APB2RSTR|=1<<14;
RCC->APB2RSTR&=~(1<<14);
USART1->BRR=btl;
USART1->CR1|=0X210C;
}
void PE5_Init()
{
RCC->APB2ENR|=1<<6;
GPIOE->CRL&=0XFF0FFFFF;
GPIOE->CRL|=0X00300000;
}
[/mw_shl_code]
这是子程序。
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "dsq.h"
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
PE5_Init();
Usartck_Init();
Gpiorest();
DSQ_Init();
while(1)
{
delay_ms(50);
}
}
void TIM5_IRQHandler (void)
{
u8 data_jishu;
delay_ms(100);
data_jishu=TIM5->CCR2;
if(data_jishu>0x56) LED=0;
if(data_jishu==0x51) LED=1;
Gpiorest();
}
void SystemInit()
{}
[/mw_shl_code]
这是主程序。
可以触摸点亮led灯。 |