源码:
链接: https://pan.baidu.com/s/17r1dJ3s21KfFIS3HOLDcLA?pwd=lolo 提取码: lolo 复制这段内容后打开百度网盘手机App,操作更方便哦
以下如果格式乱就打开【腾讯文档】超声波自拍神器项目
https://docs.qq.com/doc/DRkhDeXZ3QmJxRWVx
https://docs.qq.com/doc/DRkhDeXZ3QmJxRWVx
一、 main.c
主函数代码
int main(void)
{
SystemInit(); //系统时钟配置函数,选择外部8M晶振
Nvic_Init(); //NVIC初始化
LED_Init(); //
Key_Init();
sleep_mode();
//Timer1_Init(488,5); //16526hz
//Timer1_Init(503,5); //15870hz 拍照
//Timer1_Init(511,5); //15617hz
//Timer1_Init(483,3); //165260hz 切换摄像头
while(1)
{
GPIO_SetBits(LED_PORT ,GPIO_Pin_6);
delay_ms(250);
GPIO_ResetBits(LED_PORT ,GPIO_Pin_6);
delay_ms(250);
if(flag)
{
flag = 0;
PWR_EnterSleepMode(PWR_SLEEPEntry_WFI);
}
}
}
1. SystemInit(),是库自带的.
.知识点1:systick定时器
1.1概念:
SysTick又称滴答定时器。是一个定时设备,位于Cortex-M0内核中,和NVIC捆绑(可以产生中断信号),产生SysTick异常(IRQ异常号15)可以对输入的时钟进行计数,系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。(1ms)。
1.2systick定时器和普通定时器(TIM)的区别:
SysTick 计数器:
①用途:用于生成系统时钟的滴答信号,从而提供精确的时间延迟和时间片管理。
适用于需要高精度延迟的应用,但功能较为简单。
②限制:
功能相对简单,主要用于基本的时间延迟和中断生成。
没有像普通定时器那样的复杂功能,例如输入捕获、输出比较、PWM 输出等。
TIM定时器
①用途:
用于更复杂的定时和计时功能,如周期性中断、PWM 信号生成、输入捕获、输出比较等。
总结: 关于两者怎么选择,如果你的应用只需要简单的周期性中断和时间延迟,SysTick 计数器可能更直接和高效。对于更复杂的应用,特别是那些需要多通道和多模式的情况,TIM 定时器会更适合。
2.Nvic_Init
void Nvic_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/*1--串口中断管理*/
//配置USART2中断
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //中断通道 USART2_IRQn
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00; //中断优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断使能
NVIC_Init(&NVIC_InitStructure); //调用函数进行初始化 NVIC_Init()用于配置 NVIC 的中断通道
//配置KEY1中断
NVIC_InitStructure.NVIC_IRQChannel = KEY1_BUTTON_EXTI_IRQn;//中断通道 KEY1_BUTTON_EXTI_IRQn
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x03; //中断优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断使能
NVIC_Init(&NVIC_InitStructure);
// 可以继续增加,设置中断优先级
}