目录

1 项目功能

2 电路原理

3 软件流程

4 程序设计

5.参考资源


1 项目功能

循环点亮LED4, LED5, LED6, LED7

2 电路原理

根据硬件电路图,PC0输出“0”,点亮LED4;PC0输出“1”,熄灭LED4。同理PC1、PC2、PC3分别对应LED5、LED6和LED7。所以PC0、PC1、PC2和PC3应该分别设置成输出模式。

3 软件流程

4 程序设计

项目建立请参考《掌上实验室V8系列教程(一)新建Keil项目》

4.1 延时程序设计

最简单的延时程序,就是通过循环进行空操作,代码如下:

void delay_ms(int ms)
{for(;ms>0;ms--){for(int i=0;i<4000;i++);}
}

这样代码有个问题就是和MCU的运行速度有关联,需要根据MCU的运行速度调整循环次数,并且延时时间也不够精确。还有一个问题是,如果配置了C语言编译优化,编译器可能会把这些代码优化掉,因为编译器会认为这些代码什么事也没做。

所以我们必须找一种可以精确延时的方式,这儿我们使用M4内核的Systick节拍定时器来进行精确延时。SysTick是一个24位减计数定时器。

typedef struct
{__IOM uint32_t CTRL; __IOM uint32_t LOAD;__IOM uint32_t VAL;__IM  uint32_t CALIB;
} SysTick_Type;

LOAD就是开始值,定时器使能后,开始减计数。每个系统时钟脉冲来一次,计数值减1。当减到0的时候就会置位CTRL的COUNTFALG。读CTRL寄存器为把COUNTFLAG清0。

VAL是计数器的当前值,写VAL就会把VAL清0(也就是说,不管你写什么值,最后VAL总是为0)。读VAL也会清零COUNTFLAG。

SysTick初始化步骤:

1. 初始化周期 (LOAD = 周期-1).
2. 清除当前值(VAL=0)
3. 设置控制值(CTRL=5,使用内部时钟,不产生中断,并开始计时 )

延时例程如下:

void delay_us(int us)
{SysTick->LOAD = system_core_clock/1000000 * us - 1; SysTick->VAL = 0;SysTick->CTRL = 0x5; //Systick采用系统时钟为时钟源,并启动while((SysTick->CTRL & (1<<16)) == 0);SysTick->CTRL = 0;     //停止Systick
}void delay_ms(int ms)
{for(;ms>0;ms--)delay_us(1000);
}

4.2 完整代码

#include "at32f403a_407_conf.h"void gpio_pins_init(void)
{//打开GPIOC时钟crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);//配置PC0~PC3为输出gpio_init_type gpio_init_struct;gpio_init_struct.gpio_pins  = GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_2 | GPIO_PINS_3;gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;gpio_init_struct.gpio_pull = GPIO_PULL_NONE;gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;gpio_init(GPIOC, &gpio_init_struct);
}void delay_us(int us)
{SysTick->LOAD = system_core_clock/1000000 * us; SysTick->VAL = 0;SysTick->CTRL = 0x5; //Systick采用系统时钟为时钟源,并启动while((SysTick->CTRL & (1<<16)) == 0);SysTick->CTRL = 0;     //停止Systick
}void delay_ms(int ms)
{for(;ms>0;ms--)delay_us(1000);
}int main(void)
{gpio_pins_init();for(;;){gpio_bits_set(GPIOC, GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_2 | GPIO_PINS_3);//全部熄灭delay_ms(250);gpio_bits_reset(GPIOC, GPIO_PINS_0); //点亮LED4delay_ms(250);gpio_bits_reset(GPIOC, GPIO_PINS_1); //点亮LED5delay_ms(250);gpio_bits_reset(GPIOC, GPIO_PINS_2); //点亮LED6delay_ms(250);gpio_bits_reset(GPIOC, GPIO_PINS_3); //点亮LED7delay_ms(250);}
}

5.参考资源

《掌上实验室V8》 原理图

AT32F403A AT32F407 固件库2.0.2 应用说明

掌上实验室V8系列教程(二)跑马灯相关推荐

  1. 掌上实验室V8系列教程(八)ADC模数转换

    目录 1 项目功能 2 ADC工作原理 3 电路原理图 4 AT32 ADC应用 4.1 ADC基础操作流程 4.2 ADC触发 4.3 ADC采样和转换时间 4.4 读取ADC转换结果 5 示例程序 ...

  2. 掌上实验室V8系列教程(四)定时器PWM输出

    1 项目功能 三色RGB LED 通过PWM 调色 2 电路原理 我们可以通过3路PWM波分别调整RGB三个二极管的亮度,即调整RGB的比例,合成不同的颜色. PWM,英文名Pulse Width M ...

  3. 掌上实验室V8系列教程(九)光电编码器转速测量

    1 项目功能 通过光电编码器进行转速测量 2 光电编码器工作原理 光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器.这是应用最多的传感器,光电编码器是由光源.光码盘和 ...

  4. 掌上实验室V8系列教程(七)I2C应用 HP203B

    目录 1 项目功能 2 电路原理图 3 传感器HP203B 3.1 HP203B功能 3.2 HP203B技术指标 3.3 HP203B I2C总线接口命令 4 示例代码 1 项目功能 通过HB203 ...

  5. 掌上实验室V8系列教程(三)数码管动态显示

    目录 1 项目功能 2 电路原理 3 动态显示原理 4 示例代码 6 扩展功能 7 参考资源 1 项目功能 4位数码管动态显示 2 电路原理 3 动态显示原理 一位八段式数码管内部有8个LED,习惯上 ...

  6. 掌上实验室V8系列教程(五)定时器中断及应用

    1 项目目标 利用定时器产生周期为1ms的中断,作为系统时基.并在数码管上显示开机时间(分辨率为0.1秒):同时实现LED4.LED5.LED6和LED7分别以300ms.220ms.450ms和70 ...

  7. git回退历史版本无法上传_Git系列教程(二):版本库中添加文件、版本回退

    Git系列教程(一):简介.安装.配置我们学习了分布式和版本控制系统的概念.Git具有的8个功能以及如何在Windows上安装Git.进行相关配置并创建版本库. Git版本库中添加文件 Git 的工作 ...

  8. 一起学CC3200系列教程之跑马灯---库

    版权所有,欢迎转载,请注明出处http://blog.csdn.net/hytgab PDF下载:http://pan.baidu.com/s/1kTkSxmB 能力有限,英语不怎么好,难免有错,有问 ...

  9. 基于雅特力AT32的 《掌上实验室》V8

    1 项目介绍 掌上实验室V8是由中国计量大学现代科技学院和雅特力共同研发的一款ARM学习板,内置AT-Link-Ez仿真器. 主MCU采用雅特力AT32F407VGT7. 板上资源: 1.通信接口 1 ...

最新文章

  1. FZU 2159 WuYou
  2. 无盘服务器读写缓存,无盘系统中实现网络磁盘本地写缓存控制的方法
  3. Sending HTML content in an email using PHP
  4. 【渝粤教育】 国家开放大学2020年春季 2411中国现代文学 参考试题
  5. LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导
  6. 苹果全面封杀Facebook:原因不能忍
  7. 让英文版的LINUX 支持中文显示
  8. Linux中du命令使用方法
  9. 题解 JZOJ 1354.土地购买
  10. Riemannian geometry applied to BCI classification
  11. 【计算机视觉算法岗面经】“吐血”整理:2019秋招面经
  12. Unraid搭建gitlab
  13. 快来Pick你喜欢的可爱符号
  14. 对于《西游记》的看法
  15. 算法竞赛入门经典 习题6-12
  16. Excel表格垂直居中后还是不在单元格中间(探究原因贴)
  17. [经验教程]2022京东618红包活动时间是什么时候开始什么时候结束及怎么领取京东618红包?
  18. Visual Studio 2022 的下载
  19. aix系统中514端口占用取消
  20. 【Vue3+Ts+Vite】使用Vite与TS构建Vue3项目

热门文章

  1. 去掉a标签超链接的虚线框的方法
  2. 强烈建议企业用户先不要安装Vista
  3. 深度学习中的单阶段小目标检测方法综述
  4. 用U盘或移动硬盘装 深山红叶袖珍系统Win PE启动盘
  5. win2000,winxp-下载
  6. 【bat】bat文件修改注册表
  7. VMware上安装centOS,能ping通本地,但是ping不了外网怎么办
  8. 【MARK】搜索引擎汇总
  9. 钻石独立棋的用HASH表和栈改进版
  10. JAVA保险公司风险测评管理系统计算机毕业设计Mybatis+系统+数据库+调试部署