基于RT-Thread调试铱星9602
铱星9602:9线制改3线制
- 执行AT&D0,进行忽略DTR引脚,返回OK
- 执行AT&K0,进行禁用流控制,改成三线模式,返回OK
- 执行AT&W0,进行保存,返回OK.
代码
#include #define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include
#include "board.h"
#include "string.h"#define KEY0 GET_PIN(H, 9) //电源控制引脚
rt_device_t uart2_dev;
struct rt_semaphore sem;
rt_thread_t uart2_th;typedef enum{FRAME_STEP_START = 0, /*判断表头*/FRAME_DATA, /*循环接收数据*/
}frame_step;struct serial_configure uart2_configs ={19200, /* 115200 bits/s */DATA_BITS_8, /* 8 databits */STOP_BITS_1, /* 1 stopbit */PARITY_NONE, /* No parity */BIT_ORDER_LSB, /* LSB first sent */NRZ_NORMAL, /* Normal mode */RT_SERIAL_RB_BUFSZ, /* Buffer size */0};rt_err_t rx_callback(rt_device_t dev, rt_size_t size)
{rt_sem_release(&sem);return RT_EOK;
}
void serial_thread_entry(void *parameter)
{char sensor_data = 0;frame_step frame = FRAME_STEP_START;char buffer[16];uint8_t offset = 0;while (1){/* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */while (rt_device_read(uart2_dev, -1, &sensor_data, 1) != 1){/* 阻塞等待接收信号量,等到信号量后再次读取数据 */rt_sem_take(&sem, RT_WAITING_FOREVER);}switch (frame){case FRAME_STEP_START:{offset = 0;if((sensor_data == 0x4F)||(sensor_data == 0x2B)||(sensor_data == 0x45)){buffer[offset++] = sensor_data;frame =FRAME_DATA;}break;}case FRAME_DATA:{buffer[offset++] = sensor_data;if(sensor_data == 0x0a){rt_kprintf("%s\n", buffer);frame = FRAME_STEP_START;rt_memset(buffer, 0, 6);//给数组清零}break;}}}
}/*增加写数据命令*/
void rt_write(int argc, char *argv[])
{rt_size_t rev;char *buffer = argv[1];if(strcmp(buffer, "AT") == 0){rev = rt_device_write(uart2_dev, 0, "AT\r\n", rt_strlen("AT\r\n"));}if(strcmp(buffer, "AT+CSQ") == 0){rev = rt_device_write(uart2_dev, 0, "AT+CSQ\r\n", rt_strlen("AT+CSQ\r\n"));}if(strcmp(buffer, "AT+SBDWT") == 0){rev = rt_device_write(uart2_dev, 0, "AT+SBDWT\r\n", rt_strlen("AT+SBDWT\r\n"));}//rev = rt_device_write(uart2_dev, 0, (char *)argv[1], rt_strlen(argv[1]));if (rev == RT_NULL){rt_kprintf("write data failed!size is %d\n", rev);return;}//rt_kprintf("%s", argv[1]);
}
MSH_CMD_EXPORT(rt_write, rt_write);int main(void)
{rt_size_t rev;char *str = "AT\r\n";/*拉高电源*/rt_pin_mode(KEY0,PIN_MODE_OUTPUT);rt_pin_write(KEY0, PIN_HIGH);uart2_dev = rt_device_find("uart2");if (uart2_dev == RT_NULL){rt_kprintf("Can't find device\n");return 0;}if (rt_device_open(uart2_dev, RT_DEVICE_FLAG_RDWR|RT_DEVICE_FLAG_INT_RX) != RT_EOK){rt_kprintf("open device failed!\n");return 0;}rt_device_control(uart2_dev, RT_DEVICE_CTRL_CONFIG, &uart2_configs);/*给铱星模块写入测试命令*/rev = rt_device_write(uart2_dev, 0, str, rt_strlen(str));//rt_kprintf("%s", str);if (rev == RT_NULL){rt_kprintf("write data failed!size is %d\n", rev);rt_device_close(uart2_dev);return 0;}rt_kprintf("write data success! %d\n", rev);/*创建线程,接收数据*/uart2_th = rt_thread_create("uart2_dev", serial_thread_entry, "uart2", 2048, 10, 5);rt_thread_startup(uart2_th);/*初始化信号量*/rt_sem_init(&sem, "rt_sem", 0, RT_IPC_FLAG_FIFO);/*数据接收回调函数*/rt_device_set_rx_indicate(uart2_dev, rx_callback);return RT_EOK;
}
注:读完一组数之后一定要给数组清零,否则下一次打印会出现错误
与9602连接时,注意收发引脚
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
