第三章:C语言和pcDuino的Arduino风格IDE

雨后的彩虹桥 发布于 2014/01/09 11:32
阅读 1K+
收藏 1

有两种风格在pcDuino上使用C语言,第一种是使用“make”命令行,另外一种是使用Arduino IDE, Arduino IDE已经包含在20130531发布的系统版本内。

Arduino风格编程程序库的工具链

源代码可以用GCC工具链进行编译,GCC已经预装在板子内。你可以在Ubuntu终端的任何目录下输入 ‘$gcc’。

注意:你可能需要通过一个桥接板和5Varduino扩展模块连接使用。

20130531版本之后中,pcDuino内置了Arduino IDE

图片33

pcDuino版本的Arduino IDE中, 有一个新的板子类型“pcDuino”, 而且它是默认的板子。

图片34

选择一个 LED的例子看看:

图片35
接下来,让我们来创建一个新的程序: 我们将用Linker kit button模块和 Linker kit LED 模块来搭建一个小实验。通过按钮来控制LED灯的开关。

代码如下:

1 /*

2 * Linker kit button and LED test

3 */

4 #include <core.h>

5 int led_pin = 2;

6 int button_pin =1;

7

8 void setup()

9 {

10

11    pinMode(led_pin, OUTPUT);

12    pinMode(button_pin, INPUT);

13

14    return;

15

16 }

17

18 void loop()

19 {

20

21   if( digitalRead(button_pin)== HIGH)

22     digitalWrite(led_pin, HIGH);  // set the LED on

23   else

24     digitalWrite(led_pin, LOW);       // set the LED off

25 }

点击“File”选择“New”:

图片36
将代码复制粘贴到新窗口中:

图片37

按以下方式保存文件,并命名为“linker_button_led”:

图片38

开发板类型选择pcDuino:

图片39

点击upload按钮,会弹出一个新窗口并运行程序:

图片40

硬件设置方面,Linker button模块插入D1Linker LED模块插入D2.当没有按按钮的时候,LED灯是熄灭的。

图片41

当按下按钮的时候,LED灯就会亮。

图片42

代码 A rduino风格IDE编程可以用 GCC 工具链进行编译 GCC 已经预装在板子内。你可以在 Ubuntu 终端的任何目录下ArdArduino风格IDE编程uino风格IDE编程 输入  ‘$gcc’。

注意:你可能需要通过一个桥接板和5Varduino扩展模块连接使用。

pcDuino板子上所有的输入输出口都是3.3VIO
如果arduino的扩展模块需要5V的输入或者输出,就需要在pcDuino上接一块桥接板。否则,如果你直接把arduino的扩展模块连接到pcDuino上,将会损坏pcDuino板子。

命令行风格

pcDuino提供了一些例程来帮助用户快速入手Arduino风格编程。 这些例子为你写自己的程序提供了一个模板。
为了配合本教程的使用,pcDuino板子需要连接到网络,并且运行一个终端

设置(一次性的):
如果是第一次使用,用如下命令安装 git

ubuntu@ubuntu :~$ sudo apt-get install git

在你的用户目录下输入以下命令:

ubuntu@ubuntu :~$ cd

ubuntu@ubuntu :~$ pwd

/home/Ubuntu

现在通过输入以下命令来下载github上的源代码:

ubuntu@ubuntu :~$ git clone https://github.com/pcduino/c_enviroment

Cloning into ’c_enviroment’…

remote: Counting objects: 250, done.

remote: Compressing objects: 100% (166/166), done.

remote: Total 250 (delta 87), reused 232 (delta 69)

Receiving objects: 100% (250/250), 302.59 KiB | 78 KiB/s, done.

Resolving deltas: 100% (87/87), done.

下载完成后, 在你的用户目录下,会生成名为“c_enviroment”的文件夹,你可以通过输入‘ls’确认:

ubuntu@ubuntu :~$ ls

Desktop Documents Downloads Music Pictures Public Templates Videos arduino c_enviroment sa

图片22

熟悉一下目录结构:

进入c_envoroment目录:

ubuntu@ubuntu :~$ cd c_enviroment

ubuntu@ubuntu :~/c_enviroment$ ls

Makefile hardware libraries output sample

现在运行“make”来编库和例子程序,命令如下:

ubuntu@ubuntu :~/c_enviroment$ make

你可以看到一系列的编译信息:

1 make[1]: Leaving directory `/home/ubuntu/c_enviroment/sample’

2 The resulting binary files are found in the output/test folder

3 ubuntu@ubuntu :~/c_enviroment$ cd output/test

4 ubuntu@ubuntu :~/c_enviroment/output/test$ ll

5 total 660

6 drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 27 06:59 ./

7 drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 27 06:49 ../

8 -rwxrwxr-x 1 ubuntu ubuntu 13868 Apr 27 06:58 adc_test*

9 -rwxrwxr-x 1 ubuntu ubuntu 28284 Apr 27 06:58 adxl345_test*

10 -rwxrwxr-x 1 ubuntu ubuntu 14209 Apr 27 06:58 interrupt_test*

11 -rwxrwxr-x 1 ubuntu ubuntu 13726 Apr 27 06:58 io_test*

12 -rwxrwxr-x 1 ubuntu ubuntu 13712 Apr 27 06:59 linker_button_test*

13 -rwxrwxr-x 1 ubuntu ubuntu 13907 Apr 27 06:59 linker_buzzer_test*

14 -rwxrwxr-x 1 ubuntu ubuntu 13689 Apr 27 06:59 linker_hall_sensor_test*

15 -rwxrwxr-x 1 ubuntu ubuntu 13760 Apr 27 06:59 linker_joystick_test*

16 -rwxrwxr-x 1 ubuntu ubuntu 13769 Apr 27 06:59 linker_led_bar_test*

17 -rwxrwxr-x 1 ubuntu ubuntu 13690 Apr 27 06:59 linker_led_test*

18 -rwxrwxr-x 1 ubuntu ubuntu 14290 Apr 27 06:59 linker_light_sensor_test*

19 -rwxrwxr-x 1 ubuntu ubuntu 13696 Apr 27 06:59 linker_magnetic_sensor_test*

20 -rwxrwxr-x 1 ubuntu ubuntu 14175 Apr 27 06:59 linker_potentiometer_test*

21 -rwxrwxr-x 1 ubuntu ubuntu 13658 Apr 27 06:59 linker_relay_test*

22 -rwxrwxr-x 1 ubuntu ubuntu 28530 Apr 27 06:59 linker_rtc_test*

23 -rwxrwxr-x 1 ubuntu ubuntu 14136 Apr 27 06:59 linker_sound_sensor_test*

24 -rwxrwxr-x 1 ubuntu ubuntu 13832 Apr 27 06:59 linker_temperature_sensor_test*

25 -rwxrwxr-x 1 ubuntu ubuntu 13714 Apr 27 06:59 linker_tilt_test*

26 -rwxrwxr-x 1 ubuntu ubuntu 13689 Apr 27 06:59 linker_touch_sensor_test*

27 -rwxrwxr-x 1 ubuntu ubuntu 40523 Apr 27 06:58 liquidcrystal_i2c*

28 -rwxrwxr-x 1 ubuntu ubuntu 40523 Apr 27 06:58 liquidcrystal_spi*

29 -rwxrwxr-x 1 ubuntu ubuntu 38242 Apr 27 06:59 pn532_readAllMemoryBlocks*

30 -rwxrwxr-x 1 ubuntu ubuntu 38238 Apr 27 06:59 pn532readMifareMemory*

31 -rwxrwxr-x 1 ubuntu ubuntu 38240 Apr 27 06:59 pn532readMifareTargetID*

32 -rwxrwxr-x 1 ubuntu ubuntu 38263 Apr 27 06:59 pn532writeMifareMemory*

33 -rwxrwxr-x 1 ubuntu ubuntu 13842 Apr 27 06:58 pwm_test*

34 -rwxrwxr-x 1 ubuntu ubuntu 32336 Apr 27 06:58 serial_test*

35 -rwxrwxr-x 1 ubuntu ubuntu 14449 Apr 27 06:58 spi_test*

36 -rwxrwxr-x 1 ubuntu ubuntu 18822 Apr 27 06:59 tone_test*

每一个例子的源代码都在例 sample 目录下:

1 ubuntu@ubuntu :~/c_enviroment/output/test$ cd ../../sample

2 ubuntu@ubuntu :~/c_enviroment/sample$ ll

3 total 148

4 drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 27 06:49 ./

5 drwxr-xr-x 7 ubuntu ubuntu 4096 Apr 27 06:58 ../

6 -rw-rw-r– 1 ubuntu ubuntu 1368 Apr 27 06:49 Makefile

7 -rw-rw-r– 1 ubuntu ubuntu 467 Apr 27 06:49 adc_test.c

8 -rw-rw-r– 1 ubuntu ubuntu 6589 Apr 27 06:49 adx.c

9 -rw-rw-r– 1 ubuntu ubuntu 5416 Apr 27 06:49 adxl345_test.c

10 -rw-rw-r– 1 ubuntu ubuntu 92 Apr 27 06:49 core.h

11 -rw-rw-r– 1 ubuntu ubuntu 830 Apr 27 06:49 interrupt_test.c

12 -rw-rw-r– 1 ubuntu ubuntu 781 Apr 27 06:49 io_test.c

13 -rw-rw-r– 1 ubuntu ubuntu 430 Apr 27 06:49 linker_button_test.c

14 -rw-rw-r– 1 ubuntu ubuntu 1420 Apr 27 06:49 linker_buzzer_test.c

15 -rw-rw-r– 1 ubuntu ubuntu 390 Apr 27 06:49 linker_hall_sensor_test.c

16 -rw-rw-r– 1 ubuntu ubuntu 327 Apr 27 06:49 linker_joystick_test.c

17 -rw-rw-r– 1 ubuntu ubuntu 2202 Apr 27 06:49 linker_led_bar_test.c

18 -rw-rw-r– 1 ubuntu ubuntu 613 Apr 27 06:49 linker_led_test.c

19 -rw-rw-r– 1 ubuntu ubuntu 1197 Apr 27 06:49 linker_light_sensor_test.c

20 -rw-rw-r– 1 ubuntu ubuntu 404 Apr 27 06:49 linker_magnetic_sensor_test.c

21 -rw-rw-r– 1 ubuntu ubuntu 647 Apr 27 06:49 linker_potentiometer_test.c

22 -rw-rw-r– 1 ubuntu ubuntu 331 Apr 27 06:49 linker_relay_test.c

23 -rw-rw-r– 1 ubuntu ubuntu 2505 Apr 27 06:49 linker_rtc_test.c

24 -rw-rw-r– 1 ubuntu ubuntu 646 Apr 27 06:49 linker_sound_sensor_test.c

25 -rw-rw-r– 1 ubuntu ubuntu 1145 Apr 27 06:49 linker_temperature_sensor_test.c

26 -rw-rw-r– 1 ubuntu ubuntu 405 Apr 27 06:49 linker_tilt_test.c

27 -rw-rw-r– 1 ubuntu ubuntu 389 Apr 27 06:49 linker_touch_sensor_test.c

28 -rw-rw-r– 1 ubuntu ubuntu 797 Apr 27 06:49 liquidcrystal_i2c.c

29 -rw-rw-r– 1 ubuntu ubuntu 831 Apr 27 06:49 liquidcrystal_spi.c

30 -rw-rw-r– 1 ubuntu ubuntu 2002 Apr 27 06:49 pitches.h

31 -rw-rw-r– 1 ubuntu ubuntu 3149 Apr 27 06:49 pn532_readAllMemoryBlocks.c

32 -rw-rw-r– 1 ubuntu ubuntu 1690 Apr 27 06:49 pn532readMifareMemory.c

33 -rw-rw-r– 1 ubuntu ubuntu 1117 Apr 27 06:49 pn532readMifareTargetID.c

34 -rw-rw-r– 1 ubuntu ubuntu 2326 Apr 27 06:49 pn532writeMifareMemory.c

35 -rw-rw-r– 1 ubuntu ubuntu 498 Apr 27 06:49 pwm_test.c

36 -rw-rw-r– 1 ubuntu ubuntu 2079 Apr 27 06:49 serial_test.c

37 -rw-rw-r– 1 ubuntu ubuntu 785 Apr 27 06:49 spi_test.c

如果要查看代码的内容(我们以linker_led_test.c的内容为例),请输入:

1 ubuntu@ubuntu :~/c_enviroment/sample$ cat linker_led_test.c

2 /*

3 * LED test program

4 */

5 #include <core.h>

6 int led_pin = 1;

7

8 void setup()

9 {

10 if(argc != 2){

11 goto _help;

12 }

13 led_pin = atoi(argv[1]);

14 if((led_pin < 0) || (led_pin > 13)){

15 goto _help;

16 }

17 pinMode(led_pin, OUTPUT);

18 return;

19

20 _help:

21 printf(“Usage %s LED_PIN_NUM(0-13)n”, argv[0]);

22 exit(-1);

23 }

24 void loop()

25 {

26 digitalWrite(led_pin, HIGH); // set the LED on

27 delay(1000); // wait for a second

28 digitalWrite(led_pin, LOW); // set the LED off

29 delay(1000); // wait for a second

30 }

现成代码的编辑:

作为初学者,一开始都是从修改别人的代码开始的,所以你将需要一个文本编辑器。我们倾向于使用nano,但你可能已经有其他常用的文本编辑器,如果没有,输入以下命令安装nano

ubuntu@ubuntu :~/c_enviroment/sample$ sudo apt-get install nano

你应该可以看到nano被下载和安装了。 
我们用上面的源代码为例子,输入:

ubuntu@ubuntu :~/c_enviroment/sample$ nano linker_led_test.c

你将看到类似下面的窗口:

图片23

对于这个sketch,有一个地方需要注意到的是,它是命令行的风格。这个例子告诉我们当命令行调用的时候,是怎么样将参数传递到Sketch的。这个可选的,在其他的Sketch中你也可能看到,它确实给pcDuino编写sketch带来了一些好处。 

创建你自己的sketch

现在让我们创建自己的Sketch (Arduino圈子里的人,把程序称为Sketch),并成功编译让其运行。按下pin7上的按钮的时候,pin8上的LED灯就亮了。 
sample文件夹内,输入:

ubuntu@ubuntu :~/c_enviroment/sample$ nano button_led.

一个空白的nano窗口将会跳出。 
将下面的代码复制和粘贴到它里面.(记住将其粘贴到nano里的光标位置,只需点击鼠标即可)

1 #include <core.h> // Required first line to run on pcDuino

2 int ledPin = 8;

3 int buttonPin = 7;

4 // variables will change:

5 int buttonState = 0; // variable for reading the pushbutton status

6

7 void setup() {

8 // initialize the LED pin as an output:

9 pinMode(ledPin, OUTPUT);

10 // initialize the pushbutton pin as an input:

11 pinMode(buttonPin, INPUT);

12 }

13

14 void loop(){

15 // read the state of the pushbutton value:

16 buttonState = digitalRead(buttonPin);

17

18 // check if the pushbutton is pressed.

19 // if it is, the buttonState is HIGH:

20 if (buttonState == HIGH) {

21 // turn LED on:

22 digitalWrite(ledPin, HIGH);

23 }

24 else {

25 // turn LED off:

26 digitalWrite(ledPin, LOW);

27 }

28 }

修改makefile和编译

现在我们需要在sample文件夹里面增加这个新的sketch makefil e里。用nano(或者你其他常用的文字编辑器)打开makefile

ubuntu@ubuntu :~/c_enviroment/sample$ nano Makefile

你将会看到所有OBJS分别列出,如下:

OBJS = io_test adc_test pwm_test spi_test adxl345_test serial_test liquidcrystal_i2c liquidcrystal_spi interrupt_test tone_test

OBJS += linker_led_test linker_potentiometer_test linker_tilt_test linker_light_sensor_test linker_button_test

OBJS += linker_touch_sensor_test linker_magnetic_sensor_test linker_temperature_sensor_test linker_joystick_test

OBJS += linker_rtc_test linker_sound_sensor_test linker_buzzer_test linker_hall_sensor_test linker_led_bar_test linker_relay_test

OBJS += pn532_readAllMemoryBlocks pn532readMifareMemory pn532readMifareTargetID pn532writeMifareMemory

在文件最后我们将用刚创建的sketch的名字增加一行:

OBJS += button_led

注意,我们没有在最后加.c
保存文件,并用”<CTRL>X“,然后按 ‘y’, 然后”<enter>”退出nano

ubuntu@ubuntu :~/c_enviroment/sample$ make

编译的最后以这样结尾:

button_led.c -o ../output/test/button_led ../libarduino.a

如果一切进行顺利,你可以到 “output/test”文件夹找到你已经创建的可执行文件:

1 ubuntu@ubuntu :~/c_enviroment/sample$ cd ../output/test/

2 ubuntu@ubuntu :~/c_enviroment/output/test$ ll

3 total 676

4 drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 27 07:51 ./

5 drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 27 06:49 ../

6 -rwxrwxr-x 1 ubuntu ubuntu 13868 Apr 27 07:51 adc_test*

7 -rwxrwxr-x 1 ubuntu ubuntu 28284 Apr 27 07:51 adxl345_test*

8 -rwxrwxr-x 1 ubuntu ubuntu 13668 Apr 27 07:51 button_led*

9 …..(not showing rest of listing here)

运行你的Sketch:

正确连接LED和按钮开关,输入:

ubuntu@ubuntu :~/c_enviroment/output/test$ ./button_led

如果要终止程序,按<Ctrl>C

快速回顾:

l 增加#include <core.h>到你的sketch的顶部。

l 在samples目里面创建你的sketch(你可以建立你自己的目录,如果你对linux, makefiles, 和编译代码熟悉的话)

l 在samples文件夹内的Makefile中,添加不带.c文件名到OBJS

l 运行make

l 从output或者test文件夹中运行可执行文件。

l 你可以在你的sketch中引入命令行参数以使其更加方便。

Arduino风格的库和例程解释

UART

参考:
请从Arduino官网上参考Serial Class(http://arduino.cc/en/Reference/Serial).

函数:

  • if (Serial)
  • available()
  • begin()
  • end()
  • find()
  • findUntil()
  • flush()
  • parseFloat()
  • parseInt()
  • peek()
  • print()
  • println()
  • read()
  • readBytes()
  • readBytesUntil()
  • setTimeout()
  • write()
  • serialEvent()

UART的接收和发送端与GPIO 01针共享。因此,如果你使用UART, 请不要调用pinmode去改变GPIO01的功能模式。 

例程:

接收从终端输入,打印出第二行的输入。读和写的操作都是通过 UART接口。 

设置:

USB转串口的线连接到PCUSB端口,并且在PC上安装USB转串口的驱动

图片24

打开设备管理器中的端口设置。

图片25
运行一个类似“sercureCRT”的终端工具,并且配置串口参数为115200 8N1

图片26
然后你在终端输入能看到相关输出。

如果你使用的是Linux PC,你可以在这个例子中使用minicom工具。

示例代码:

1 void setup() {

2          //Initialize serial with baudrate setting, the default config is SERIAL_8N1

3           int rate = 115200;

4           Serial.begin(rate);

5

6 //you will see the string on the terminal

7 Serial.println(“Serial begin: ”);

8 }

9

10 void loop() {

11 //if you type the character in the terminal, available() will return the size you typed

12           if (Serial.available() > 0) {

13                 // read the incoming byte:

14                     char thisByte = Serial.read();

15

16                     //print it on the terminal with DEC format

17                     Serial.print(“I received: ”);

18                     Serial.println(thisByte, DEC);

19   }

20   delay(200);

21 }

ADC函数:

analogReference()
pcDuino有内部参考的电压。 对于ADC0 ADC1,参考的电压是2V,对于ADC2-5,参考的电压是3.3V。 因此,这个函数并没有改变和原始的arduino板子不一样的参考电压。 

analogRead()
ADC0 ADC1 6位的ADC, 返回值是0-63,范围为02V。 
ADC2~ADC512ADC,返回值是0-4095,范围为03.3V。 

注意:

  • 如果你想测量高电压,你可以购买pcDuino的桥接板,它可以测量最大至5V的输入。
  • 对于ADC0ADC1, 虽这项功能可以在4微妙内返回但实际的转化率是250Hz。因此,如果输入电压改变, 可以在4毫秒内被察觉。 对于ADC2-ADC5,这项功能可以在35微妙内返回,返回值为实际测量到的返回值。

范例:

测量干电池的电压。

设置:
连接电池的负极到GND,和连接正极到ADC1

图片27

示例代码:

读ADC的值

1 Int adc_id = 0;

2 void setup() {

3 //argv[1] store the adc id that will be measured.

4 //if no args, default adc_id is 0

5 if ( argc == 2 )

6                     adc_id = atoi(argv[1]);

7 }

8

9 void loop() {

10 // get adc value

11     int value = analogRead(adc_id);

12

13 //delay some time in loop

14     delayMicroseconds(100000);

15 }

PWM

参考
analogWrite()-值为0的时候,PWM IO 处于低电平

注意:

  • PWM1PWM2是硬PWM。 默认频率520Hz256个占空比级数。PWM3/4/5默认频率5Hz10个占空比级数。因此实际占空比的值为value*10/256PWM3/4/5是通过GPIO软件模拟的,因此他们不能设置高频率。如果你需要通过软件模拟高精度和高频率的PWM,将会占用大量CPU的资源。
  • 6PWM pin是和GPIO共享的,PWM4/ PWM 5pin同时也和SPI IO共享。因此,如果你想要使用PWM,就不能调用pinMode()或者SPI函数去指定IO

没有实现的函数:

tone()

noTone()

tone 函数可以通过设置频率和持续时间来产生一个方波。你不能像Arduino那样将tone函数做铃声,因为pcDuinotone函数只在几个特定的频率下才工作。我们将在未来的版本中改进。

将会为需要更高或者更低的PWM频率的客户提供了一个扩展功能。到目前为止,暂不能在每个频率下都支持256的占空比。假定某个频率的最大占空比是max_level,实际占空比就为level * max_level/256。这个功能对tone()函数也非常有用。

PWM2/3/4/5 将会以后的的版本中改进,最终目标是支持500Hz,占空比256

范例

通过PWM来控制蜂鸣器发出不同频率的声音。

设置

1个接GND1个接PWM1。如图所示:

图片28

代码:

1 int pwm_id = 1;

2 int duty_level = 128;

3

4 void setup() {

5      //set the default freq (#define default_freq 0)

6 //PWM0/3/4/5, default_freq is 5Hz, and PWM1/2 is 520Hz

7      if ( argc > 1 )

8        pwm_id = atoi(argv[1]);

9 if ( argc > 2 ) //duty level can be 0 ~ 256

10        duty_level = argv[2];

11

12 //start the PWM

13     analogWrite(pwm_id, duty_level);

14 }

15

16 void loop() {

17 //delay in loop

18     delay(10);

19 }

GPIO

参考函数:
pinMode()
digitalRead()
digitalWrite()
pulseIn()

范例
使用GPIO接口,通过按钮来控制LED的开/关。

设置
将 按钮连上GPIO1LED连上GPIO5。如图所示:

图片29

代码:

1 int led_pin = 5;

2 int btn_pin = 1;

3 void setup() {

4     if ( argc == 3 ) {

5                     btn_pin = atoi(argv[1]);

6                         led_pin = atoi(argv[2]);

7 }

8 //set the gpio to input or output mode

9     pinMode(led_pin, OUTPUT);

10     pinMode(btn_pin, INPUT);

11 }

12

13 void loop() {

14 //press btn_pin to turn on LED

15     int value = digitalRead(btn_pin);

16     if ( value == HIGH )  { // button pressed

17         digitalWrite(led_pin, HIGH); // turn on LED

18     } else  { // button released

19            digitalWrite(led_pin, LOW); // turn off LED

20     }

21     delay(100);

22 }

I2C

参考函数
请参阅http://arduino.cc/en/Reference/Wire

函数:

  • begin()
  • requestFrom()
  • beginTransmission()
  • endTransmission()
  • write()
  • available()
  • read()
  • onReceive()
  • onRequest()

pcDuino I2C频率设置为200KHz7-bit。默认为master only

改进:
未来将会允许客户自行设置I2C的频率,也将会支持10-bit

范例:
通过I2C接口读取三轴加速器的X/Y/Z轴的值。

设置:

将三轴加速器的I2C接口与pcDuino连接,如图所示

图片31

SPI

参考函数
请参阅http://arduino.cc/en/Reference/SPI

函数:

  • begin()
  • end()
  • setBitOrder()
  • setClockDivider()
  • setDataMode()
  • transfer()

pcDuinoSPI只能在主模式下工作,最大速度为12MHz。时钟分频器可以设置为2/4/8/16/32/64/128.
注意:调用setClockDivider()函数只是保存设置时钟分频器,但没有真正的时钟变化。当调用transfer()函数时,才能起作用。

例子:
读取M25P16SPI flash ID

设置:

图片32

GND  ———-  GND
V3.3  ———-   3.3V
DO  ———-  SPI_MISO
DI   ———-  SPI_MOSI
CS   ———-  SPI_CS
CLK  ———   SPI_CLK

代码:

1 int ReadSpiflashID(void) {

2     char CMD_RDID = 0x9f;

3     char id[3];

4     int flashid = 0;

5

6     memset(id, 0×0, sizeof(id));

7     id[0] = SPI.transfer(CMD_RDID, SPI_CONTINUE);

8     id[1] = SPI.transfer(0×00, SPI_CONTINUE);

9     id[2] = SPI.transfer(0×00, SPI_LAST);

10

11 //MSB first

12      flashid = id[0] << 8;

13      flashid |= id[1];

14      flashid = flashid << 8;

15      flashid |= id[2];

16

17      return flashid;

18 }

19

20 void setup() {

21    // initialize SPI:

22     SPI.begin();

23 }

24

25 void loop() {

26     //MSB first

27     printf(“spi flash id = 0x%x\n”, ReadSpiflashID());

28     delay(2000);

29 }

Arduino风格IDE编程

20130531版本之后中,pcDuino内置了Arduino IDE

图片33

pcDuino版本的Arduino IDE中, 有一个新的板子类型“pcDuino”, 而且它是默认的板子。

图片34

选择一个 LED的例子看看:

图片35
接下来,让我们来创建一个新的程序: 我们将用Linker kit button模块和 Linker kit LED 模块来搭建一个小实验。通过按钮来控制LED灯的开关。

代码如下:

1 /*

2 * Linker kit button and LED test

3 */

4 #include <core.h>

5 int led_pin = 2;

6 int button_pin =1;

7

8 void setup()

9 {

10

11    pinMode(led_pin, OUTPUT);

12    pinMode(button_pin, INPUT);

13

14    return;

15

16 }

17

18 void loop()

19 {

20

21   if( digitalRead(button_pin)== HIGH)

22     digitalWrite(led_pin, HIGH);  // set the LED on

23   else

24     digitalWrite(led_pin, LOW);       // set the LED off

25 }

点击“File”选择“New”:

图片36
将代码复制粘贴到新窗口中:

图片37

按以下方式保存文件,并命名为“linker_button_led”:

图片38

开发板类型选择pcDuino:

图片39

点击upload按钮,会弹出一个新窗口并运行程序:

图片40

硬件设置方面,Linker button模块插入D1Linker LED模块插入D2.当没有按按钮的时候,LED灯是熄灭的。

图片41

当按下按钮的时候,LED灯就会亮。

图片42

linksprite学习中心




加载中
返回顶部
顶部