[SAM4N学习笔记]LED点灯程序
一、准备工作:
将上一节搭建的工程模板复制一份,命名为“1.blink”,这作为我们开发的第一个程序。
二、程序编写:
板子上只有一个可控制的LED,就是LED0,在按键的旁边。打开原理图,可以看到LED的电路如下图:

通过原理图可以看出,LED和MCU的PB14相连接,当PB14输出低电平的时候,LED就会被点亮,为高电平的时候被熄灭。
下面开始编写LED驱动程序,首先在“Drivers”文件夹创建一个“drv_led.c”和“drv_led.h”文件,并加入到工程的“Drivers”分组下,在drv_led.c中编写led驱动程序,如下:
#include "drv_led.h"
void led_hw_init(void)
{
/*禁止外设管理控制寄存器(PMC)写保护*/
PMC->PMC_WPMR = 0x504D4300;
/*使能PIOB时钟*/
PMC->PMC_PCER0 = (1UL << ID_PIOB );
/*使能外设管理控制寄存器(PMC)写保护*/
PMC->PMC_WPMR = 0x504D4301;
/*使能LED管脚*/
PIOB->PIO_PER|=(0x01<<LED0_PIN);
/*使能LED管脚输出*/
PIOB->PIO_OER|=(0x01<<LED0_PIN);
/*设置LED输出,即LED管脚为高电平*/
PIOB->PIO_SODR|=(0x01<<LED0_PIN);
}
这里就写一个函数体,里面放置led的初始化代码,首先是要去开启PIOB的时钟,PMC中的PMC_PCER0是控制各种外设时钟的,而且这个寄存器是被写保护的,在写之前,需要禁止写保护,这样写入数据才有效,给对应PIOB的ID位置1就算是开启了PIOB的时钟。讲到这里,也许有人注意到上一节搭建工程模板的时候这个没开启怎么就能成功点亮LED呢?是的,上次纯属侥幸。应该是芯片默认是开启这个PIOB时钟的,但对于我们编写驱动来说,这个步骤还是不要少的好,因为有可能再次之前这个别其他程序关掉了。
接下来是使能PIOB14管脚的GPIO功能,通过PIOB的PIO_PER寄存器去使能,对应的还有PIO_PDR是失能GPIO功能。使能了PIOB14的GPIO功能后,还要使能它的输出功能,接着就可以用过PIO_SODR和PIO_CODR去控制输出低电平还是高电平了。
在drv_led.h中主要是初始化函数的声明好LED控制相关的宏,如下:
#ifndef __DRV_LED_H
#define __DRV_LED_H
#include "sam4n.h"
#define LED0_PIN 14
#define led_hw_on() PIOB->PIO_CODR=(0x01UL<<LED0_PIN)
#define led_hw_off() PIOB->PIO_SODR=(0x01UL<<LED0_PIN)
void led_hw_init(void);
#endif
主要是防重复包含和LED控制的两个宏定义,接下来在main.c中程序如下:
int main(void)
{
led_hw_init();
while(1){
led_hw_on();
delay(300);
led_hw_off();
delay(300);
}
}
主要是先初始化led,然后就可以控制led的亮和灭了。效果我就不说了,就是简单的一亮一灭功能。主要是先熟悉一下SAM4N的GPIO是怎么驱动的。
[SAM4N学习笔记]LED点灯程序的更多相关文章
- [快手(AAuto)学习笔记]如何让程序在运行时请求管理员权限(UAC)
作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂, ...
- 微信小程序学习笔记一 小程序介绍 & 前置知识
微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...
- linux学习笔记:vim程序编辑器—vim的使用
注:以下是学习<鸟哥的linux私房菜>(第三版)的学习笔记,纯属个人学习记录. 2018-11-19 一.学习vim的原因 很多软件的编辑接口都会主动调用vi 二.vim的使用 (1)v ...
- Arduino学习笔记二:修改LED点灯程序
看了开源社区的LED控制程序,开始上手代码编写,修改,下载以及调试,原文地址:http://www.arduino.cn/thread-1072-1-1.html,这个帖子写的比较通俗易懂. 自己移植 ...
- [SAM4N学习笔记]按键程序(查询方式)
一.准备工作: 将上一节搭建的工程复制一份,命名为"5.key scanf".这一节主要讲如何使用SAM4N的GPIO输入功能,实现按键的输入. 二.程序编写: ...
- [SAM4N学习笔记]按键程序(中断方式)
一.准备工作: 将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...
- [SAM4N学习笔记]SAM4N工程模板搭建
一.需要安装的软件: 因为笔者是使用MDK-ARM开发的版本是4.72,所以需要安装这个工具,具体在哪里下载自行放狗或问度娘.除了这个重要工具以为,还需要安装Atmel官方的Atmel Studio, ...
- [SAM4N学习笔记]UART的使用
一.准备工作: 将上一节搭建的工程复制一份,命名为"3.uart".这一节主要讲如何使用SAM4N的UART功能,实现串口的收发. 二.程序编写: 细心看数据手册的朋友也 ...
- SAS学习笔记37 宏程序中parmbuff选项
该选项用于指定宏可以接受可变参数列表,而且参数值保存在SYSPBUFF宏变量中.parmbuff的参数价值,其实就是每次执行宏程序时,可以指定不同数量的参数值,这些宏参数被保存在&syspbu ...
随机推荐
- c++ primer复习(四)
1 标准库容器 顺序容器:vector.list.deque 容器适配器:stack.queue.priority_queue 2 容器元素类型约束: 容器元素类型必须支持复制和赋值,因为容器存放的都 ...
- ASP.NET的GET和POST方式的区别归纳总结
表单提交中,ASP.NET的Get和Post方式的区别归纳如下 几点: 1. get是从服务器上获取数据,post是向服务器传送数据. 2. get是把参数数据队列加到提交表单的ACTION属性所指 ...
- linux扩展lvm磁盘
env: centos 6.5 x64 hyper-v虚拟机 这个方法可以在当前运行的系统中扩展root磁盘 详细步骤 之前想创建的一个虚拟机的磁盘空间不够用了,所以想扩容一下磁盘. 正好使用的时候是 ...
- Quartz 之 windowService
(一)创建服务 QuarzService using System.ServiceProcess;using System.Text; using Quartz;using Quartz.Impl; ...
- CSS禁止Chrome谷歌浏览器激活输入框后自动添加橘黄色边框
Chrome默认会为所有的输入框加上橘黄色的边框,虽然有时候可以使我们的网站看起来更友好,但对自定义的样式是有影响的.当鼠标点击输入框时,在谷歌chrome浏览器中,光标移到输入框时激活输入框会被加上 ...
- zzuli oj 1145 有问题的里程表 2
Description 某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数.然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位. 十位.百位等)上的数字都是如此 ...
- POJ 1905 Expanding Rods 二分答案几何
题目:http://poj.org/problem?id=1905 恶心死了,POJ的输出一会要lf,一会要f,而且精度1e-13才过,1e-12都不行,错了一万遍终于对了. #include < ...
- Case When PK PIVOT
SELECT *FROM ScoreInfogo Name Course Score---------- ---------- -----------Lucy Chinese 74Jim Math 8 ...
- python和django的一些小技巧(locals()...)
locals() 技巧: 思考一下我们对 current_datetime 的最后一次赋值: >>> import datetime >>> def current ...
- 在Eclipse中安装ADT
启动 Eclipse,然后选择 Help > Software Updates….在出现的对话框中,单击 Available Software 选项卡. 单击 Add Site 在 Add Si ...