智能门锁:第一讲

第一讲:标准库零基础扫盲

建立工程

点击文件—>点击新建—>点击MounRiver工程

取消勾选使用解决方案位置,勾选创建工程文件夹并添加路径;设置工程名;选择芯片型号CH32V307VCT6

新建工程后,删除不必要注释,代码如下

写入测试程序,打开串口,开发板按下reset键,打印出hello,则代码可跑通

GPIO点灯

移植路径:01may嵌赛智能门锁江西省单片机仿真\嵌入式大赛\嵌赛沁恒赛道\项目\乡村智居系统\沁恒资料\例程\官网例程\EVT307\EXAM\GPIO\GPIO_Toggle

从例程中移植GPIO的相关代码,查看原理图得知:LED2引脚为PC2,PC2是挂在APB2总线,并更改相关引脚,如第一个红框所示**(这段底层代码一定要有)**

在while(1)循环中调用库函数GPIO_SetbBits、GPIO_ResetbBits、Delay_Ms,实现以1秒为周期进行LED2的亮灭,如第二个红框所示**(这段属于应用层代码)**

定时器与中断配置

移植路径:01may嵌赛智能门锁江西省单片机仿真\嵌入式大赛\嵌赛沁恒赛道\项目\乡村智居系统\乡村智居系统代码\MounRiver工程\智能中控\ZK_V6.4

Tim3_Init(1000, 96-1) 括号里的参数是定时器的配置参数,用来设置定时器产生中断的时间间隔

arr - Auto Reload Register(自动重装载值)

 u16 arr = 1000;  // 计数器从0数到1000

psc - Prescaler(预分频值) 注:

 // 你写的:96-1 = 95
 psc = 95;  // 写入预分频寄存器
 // STM32内部执行:
 实际分频系数 = psc + 1 = 95 + 1 = 96
 // 结果:
 72,000,000 Hz ÷ 96 = 750,000 Hz
 //告诉定时器:"嘿,每96个脉冲,你只数1次!"就像:每96滴雨,你只数1滴

第一个参数:1000

  • 对应:自动重装载值(TIM_Period = arr

  • 作用:计数器的最大值。计数器从0开始计数,达到这个值后产生溢出中断,然后从0重新开始

  • 示例:设为1000,表示计数器从0数到1000后产生中断

第二个参数:96-1

  • 对应:预分频值(TIM_Prescaler = psc

  • 作用:对系统时钟进行分频,降低计数频率

  • 实际值96-1 = 95

  • 预分频器:实际分频系数 = psc + 1

    • 写入0:1分频(不分频)

    • 写入1:2分频

    • 写入95:96分频

  • 自动重装载值:实际计数到 arr 就溢出

    • psc = 96-1 = 95 → 实际96分频

    • arr = 1000 → 计数到1000溢出

    你想写入 实际效果 例子
    0 1分频(不分频) 频率不变
    1 2分频 频率减半
    N-1 N分频 95 = 96分频
    71 72分频 72MHz→1MHz
    7199 7200分频 72MHz→10kHz

配置定时器与中断,并定义标志位和计数值,实现以2秒为周期的LED灯的亮灭

3 个赞