本篇文章进行基础功能配置,实现基本串口打印,OLED屏幕显示字符串,汉字,图片,LED以及按键功能,同时实现串口与esp8266通信。
本次开发使用的KEIL进行进行开发,使用手上的PWlink进行调试,比较方便,串口添加。本次一共需要使用两个串口,串口二用来调试输出,串口1用来与esp8266进行通信,首先说一下串口这里遇到的坑,板子上使用的晶振为12MHZ,时钟默认为24MHZ的晶振,导致时钟不一样。
FSP默认值24MHZ:
串口配置,在KEIL工具下打开配置工具:
点击PIN配置,选择SCI1和SCI2
将SCI1功能选择选择为串口
将SCI也配置为串口
在Stacks中添加串口配置:
完成后如下所示:
接下来使用IIC与OLED进行通信,使用SCI3,对应板子上设计的IIC接口,选择SCI3,配置功能为IIC:
在Stacks中添加IIC配置:
LED灯配置,LED灯只需在pin中将IO设置为输出模式,KEY配置将IO设置输入模式。
然后保存工程配置,点击生成工程按钮
注意:
如果在RASC配置中,长时间没有关闭,有事外出将电脑休眠,再次进行配置时发现不能生成工程会报错,此时只需将退出,重新打开即可。
由于RASC生成了外设的基本配置后,需进行初始化,写回调函数等,不方便工程管理,如果全部放在同一个文件夹中,代码看起来比较乱,可读性比较差,所以对工程进行整理封装。
测试代码:
`#include "hal_data.h"
/* 用户头文件包含 */
#include "led/bsp_led.h"
#include "key/bsp_key.h"
#include "oled/oled.h"
#include "debug_uart/bsp_debug_uart.h"
#include "bsp_esp8266/bsp_wifi_esp8266.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
/* Callback function /
i2c_master_event_t i2c_event = I2C_MASTER_EVENT_ABORTED;
void sci_i2c_master_callback(i2c_master_callback_args_t p_args)
{
i2c_event = I2C_MASTER_EVENT_ABORTED;
if (NULL != p_args)
{
/ capture callback event for validating the i2c transfer event/
i2c_event = p_args->event;
}
}
fsp_err_t err = FSP_SUCCESS;
uint32_t timeout_ms = 100000;
void hal_entry(void)
{
/* TODO: add your own code here */
LED_Init(); // LED 初始化
OLED_Init();
OLED_Clear();
Debug_UART2_Init();
ESP8266_UART1_Init();
printf("hello world\r\n");
while(1)
{
if( Key_Scan(KEY_SW1_PIN) == KEY_ON ) //扫描判断按键
{
LED1_ON; //宏定义 LED 开
LED2_ON;
LED3_ON;
OLED_ShowString(0,0,"RA4M2",16);
}
if( Key_Scan(KEY_SW2_PIN) == KEY_ON )
{
LED1_OFF; //宏定义 LED 关
LED2_OFF;
LED3_OFF;
printf("hello world\r\n");
OLED_Clear();
}
}
`
按键与OLED测试,通过按键进行切换显示,SW1按下,OLED显示:
按下SW2后,OLED显示消失,LED灯亮:
AT指令测试,打开串口调试助手,输入AT+换行符,回复OK
本次基本功能的搭建就已经完成,实现了底层驱动配置,以及AT使用。搭建过程中也遇到了晶振原因的坑以及电脑休眠导致RASC生成工程失效。但还是解决了,工具使用起来也越来越顺手了,有个建议就是RTT的支持,驱动相对比较少,希望能支持完整。
更多回帖