本篇文章主要参考:
串口通信API 这篇文章,下面的就是摘录一下
硬件初始化函数
int wiringPiSetup (void) | 返回:执行状态,-1表示失败 | 当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0~16需要root权限 |
---|---|---|
int wiringPiSetupGpio (void) | 返回执行状态,-1表示失败 | 当使用这个函数初始化树莓派引脚时,程序中使用的是BCM GPIO 引脚编号表。需要root权限 |
wiringPiSetupPhys(void) | 不常用,不做介绍 | |
wiringPiSetupSys (void) ; | 不常用,不做介绍 |
通用GPIO控制函数
时间控制函数
中断
多线程
多线程建议采用Linux下自带的多线程函数
串口通信
demo1
#include <wiringPi.h>
#include <wiringSerial.h>
int main(){
int fd;
wiringPiSetup();
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
serialPutchar(fd,'w');
delayMicroseconds(1000000);
}
return 0;
}
demo2
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
int main(){
int fd,cmd;
wiringPiSetup();
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
while(serialDataAvail(fd) != -1){
cmd = serialGetchar(fd);
if(cmd == '2'){
//因为serialGetchar获取的是字符类型,所以2要加引号
serialPuts(fd,"TV is on!\r\n");
}
}
}
return 0;
}
demo3
如果树莓派接入语音识别模块,这个demo即可识别语音了
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(){
int fd,n_read;
char buf[128] = {'\0'};
wiringPiSetup();
fd = serialOpen("/dev/ttyAMA0",9600);
if(fd == -1){
perror("Why");
printf("Serial open failure!\n");
exit(-1);
}
while(1){
n_read = read(fd, buf, sizeof(buf));
if(n_read == 0){
printf("It seems nothing!\n");
continue;
}
printf("Bytes:%d\nContent:%s\n",n_read,buf);
memset(buf,'\0',sizeof(buf));
}
return 0;