第一讲:标准库零基础扫盲
建立工程
点击文件—>点击新建—>点击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溢出
你想写入 实际效果 例子 01分频(不分频) 频率不变 12分频 频率减半 N-1N分频 95= 96分频7172分频 72MHz→1MHz 71997200分频 72MHz→10kHz -
配置定时器与中断,并定义标志位和计数值,实现以2秒为周期的LED灯的亮灭






