[中微快充电压申请kit] 测评报告2: 点灯
[复制链接]
本帖最后由 flyaqiao 于 2023-11-8 15:03 编辑
收到开发板已经有一段时间了,今天开始安装Keil环境,编写一个程序,什么程序呢,当然是嵌入界的Hello World,点灯啦
先看效果:
3930f3589d24da4f64828a43377bcac2
首先得安装芯片的开发环境了,安装过程如下:
1.下载官方软件包
https://bbs.eeworld.com.cn/elecplay.php?action=show&op=download&id=300&did=5
解压得到E:\CMS目录
int main(void)
{
SYS_DisableIOCFGProtect(); /*关闭IOCONFIG写保护*/
SYS_DisableGPIO0Protect(); /*关闭GPIO0的相关寄存器写保护*/
SYS_DisableGPIO1Protect(); /*关闭GPIO1的相关寄存器写保护*/
SYS_DisableGPIO2Protect(); /*关闭GPIO2的相关寄存器写保护*/
SYS_DisableGPIO3Protect(); /*关闭GPIO3的相关寄存器写保护*/
SYS_DisableGPIO4Protect(); /*关闭GPIO4的相关寄存器写保护*/
SYS_ConfigHSI(SYS_CLK_HSI_48M); /*设置内部高速时钟为48Mhz*/
SYS_EnableHSI(); /*开启高速时钟*/
SYS_ConfigAHBClock(SYS_CLK_SEL_HSI, SYS_CLK_DIV_1); /*设置AHB时钟为高速时钟的1分频*/
SYS_ConfigAPBClock(AHB_CLK_DIV_1); /*设置APB时钟为AHB时钟的1分频*/
SystemCoreClockUpdate(); /*刷新SystemCoreCLk、SystemAPBClock变量值*/
SYS_SET_IOCFG(IOP06CFG, SYS_IOCFG_P06_GPIO); // LED1配置
SYS_SET_IOCFG(IOP07CFG, SYS_IOCFG_P07_GPIO); // LED2配置
SYS_SET_IOCFG(IOP26CFG, SYS_IOCFG_P26_GPIO); // LED3配置
SYS_SET_IOCFG(IOP25CFG, SYS_IOCFG_P25_GPIO); // LED4配置
SYS_SET_IOCFG(IOP24CFG, SYS_IOCFG_P24_GPIO); // LED5配置
// 输出初始化
GPIO0->DO_f.P6 = 0;
GPIO0->DO_f.P7 = 0;
GPIO2->DO_f.P6 = 0;
GPIO2->DO_f.P5 = 0;
GPIO2->DO_f.P4 = 0;
// 设置GPIO输出模式
GPIO_CONFIG_IO_MODE(GPIO0, GPIO_PIN_6, GPIO_MODE_OUTPUT);
GPIO_CONFIG_IO_MODE(GPIO0, GPIO_PIN_7, GPIO_MODE_OUTPUT);
GPIO_CONFIG_IO_MODE(GPIO2, GPIO_PIN_6, GPIO_MODE_OUTPUT);
GPIO_CONFIG_IO_MODE(GPIO2, GPIO_PIN_5, GPIO_MODE_OUTPUT);
GPIO_CONFIG_IO_MODE(GPIO2, GPIO_PIN_4, GPIO_MODE_OUTPUT);
Systick_Config();
while (1) {}
}
然后修改SysTick的中断函数SysTick_Handler,在文件isr.c中
static int iSysTicks = 0;
// 翻转指定的LED
static void TriggerLed(int idx)
{
switch (idx) {
case 0:
GPIO0->DO_f.P6 = ~GPIO0->DO_f.P6;
break;
case 1:
GPIO0->DO_f.P7 = ~GPIO0->DO_f.P7;
break;
case 2:
GPIO2->DO_f.P6 = ~GPIO2->DO_f.P6;
break;
case 3:
GPIO2->DO_f.P5 = ~GPIO2->DO_f.P5;
break;
case 4:
GPIO2->DO_f.P4 = ~GPIO2->DO_f.P4;
break;
}
}
void SysTick_Handler(void)
{
iSysTicks++;
if ((iSysTicks % 1000) == 0)
TriggerLed((iSysTicks / 1000) % 5);
}
由初始化SysTick_Config(4800); /*100us*/得知,一次中断是100us,使用计数器iSysTIcks实现100ms翻转一个LED.以实现跑马灯效果
相关修改附在后面
|