做网站什么系统好,蓝莓直播视频,一起做网店网站官方,自己做网站卖衣服目录
概述
1 软硬件介绍
1.1 软件版本信息
1.2 ST7796-LCD
1.3 MCU IO与LCD PIN对应关系
2 FSP配置项目
2.1 配置项目参数
2.2 生成项目框架
3 代码实现
3.1 SPI的库函数
3.1.1 R_SCI_SPI_Open()
3.1.2 R_SCI_SPI_Read()
3.1.3 R_SCI_SPI_Write()
3.2 应用函数…目录
概述
1 软硬件介绍
1.1 软件版本信息
1.2 ST7796-LCD
1.3 MCU IO与LCD PIN对应关系
2 FSP配置项目
2.1 配置项目参数
2.2 生成项目框架
3 代码实现
3.1 SPI的库函数
3.1.1 R_SCI_SPI_Open()
3.1.2 R_SCI_SPI_Read()
3.1.3 R_SCI_SPI_Write()
3.2 应用函数接口
3.2.1 SPI初始化函数
3.2.2 读数据接口
3.2.3 写数据接口
3.2.4 回调函数
3.2.5 SPI应用程序源代码
3.3 LCD驱动程序实现
3.3.1 驱动代码
3.3.2 测试代码实现
4 测试结果 概述
本文主要介绍使用Renesas MCU之SPI读写数据功能包括硬件资源介绍,FSP配置项目的方法还介绍了SCI_SPI的接口函数笔者使用一款SPI接口类型的LCD作为Device使用SCI_SPI接口驱动该LCD,还编写测试函数验证其功能。
1 软硬件介绍
1.1 软件版本信息
软硬件信息版本信息Renesas MCUR7FA4M2AD3CKeilMDK ARM 5.38FSP 版本5.3.0调试工具st-linkST-LINK/V2-1 注意 在Keil MDK中可以更改FSP的版本方法如下 1.2 ST7796-LCD
LCD的PIN引脚功能介绍
序号模块引脚引脚说明1VCC屏电源正2GND屏电源地3LCD_CS液晶屏片选控制信号低电平有效4LCD_RST液晶屏复位控制信号低电平复位5LCD_RS液晶屏命令/数据选择控制信号 高电平数据低电平命令 6SDI(MOSI)SPI总线写数据信号SD卡和液晶屏共用7SCKSPI总线时钟信号SD卡和液晶屏共用8LED液晶屏背光控制信号如需要控制请接引脚如不需要控制可以不接9SDO(MISO)SPI总线读数据信号SD卡和液晶屏共用10CTP_SCL电容触摸屏IIC总线时钟信号无触摸屏的模块不需连接11CTP_RST电容触摸屏复位控制信号低电平复位无触摸屏的模块不需连接12CTP_SDA电容触摸屏IIC总线数据信号无触摸屏的模块不需连接13CTP_INT电容触摸屏IIC总线触摸中断信号产生触摸时输入低电平到主控无触摸屏的模块不需连接14SD_CSSD卡片选控制信号低电平有效不使用SD卡功能可不接
实体LCD Port对应关系如下图所示 1.3 MCU IO与LCD PIN对应关系
RA4M2 PIN引脚LCD PIN引脚BSP_IO_PORT_01_PIN_01MOSIBSP_IO_PORT_01_PIN_00MISOBSP_IO_PORT_01_PIN_02SCKBSP_IO_PORT_01_PIN_05CSBSP_IO_PORT_01_PIN_06RSTBSP_IO_PORT_01_PIN_03RS
2 FSP配置项目
2.1 配置项目参数
1配置系统工作时钟笔者的开发板使用的外部晶振为12M Hz 2) 在Pins面板上使能SCI0配置选择IO口如下 3在stack面板上创建SPI模块 4配置SPI的相关参数 2.2 生成项目框架 完成参数配置之后就可以生成项目框架点击Generate project就可以生成项目代码使用Keil打开项目其结构如下 3 代码实现
3.1 SPI的库函数
3.1.1 R_SCI_SPI_Open()
函数原型 fsp_err_t R_SCI_SPI_Open( spi_ctrl_t * p_api_ctrl,spi_cfg_t const *const p_cfg ) 函数功能 初始化SPI通信模式 该函数的主要任务如下: 1执行参数检查和处理错误条件。 2开启SCI通道时钟。 3使用默认值和用户可配置选项初始化相关的寄存器。 4提供与其他API函数一起使用的通道句柄。 参数介绍 p_api_ctrlPointer to the control structure.p_cfg Pointer to a configuration structure. 返回值 FSP_SUCCESSChannel initialized successfully.FSP_ERR_ASSERTIONAn input parameter is invalid or NULL.FSP_ERR_ALREADY_OPENThe instance has already been opened.FSP_ERR_IP_CHANNEL_NOT_PRESENTThe channel number is invalid. 3.1.2 R_SCI_SPI_Read()
函数原型
fsp_err_t R_SCI_SPI_Read ( spi_ctrl_t *const p_api_ctrl,void * p_dest,uint32_t const length,spi_bit_width_t const bit_width ) 函数功能从SPI设备接收数据。 该函数的主要任务如下: 1执行参数检查和处理错误条件。 2使发射机。 3使接收机。 4启用中断。 5通过向TXD寄存器写入数据来启动数据传输。 6从接收缓冲区接收数据发生完全中断并将数据复制到目标缓冲区。 7通过接收缓冲区完全中断和发送虚拟数据完成数据接收。 8禁用发射机。 9禁用接收机。 10禁用中断。 参数介绍 p_api_ctrlPointer to the control structure.p_destPointer to the destination buffer.lengthThe number of bytes to transfer.bit_widthInvalid for SCI_SPI (Set to SPI_BIT_WIDTH_8_BITS). 返回值介绍 FSP_SUCCESSRead operation successfully completed.FSP_ERR_ASSERTIONOne of the following invalid parameters passed: Pointer p_api_ctrl is NULLBit width is not 8 bitsLength is equal to 0Pointer to destination is NULLFSP_ERR_NOT_OPENThe channel has not been opened. Open the channel first.FSP_ERR_UNSUPPORTEDThe given bit_width is not supported.FSP_ERR_IN_USEA transfer is already in progress. 3.1.3 R_SCI_SPI_Write()
函数原型 fsp_err_t R_SCI_SPI_Write ( spi_ctrl_t *const p_api_ctrl,void const * p_src,uint32_t const length,spi_bit_width_t const bit_width ) 函数功能将数据传输到SPI设备 该函数的主要任务如下: 1执行参数检查和处理错误条件。 2使发射机。 3启用中断。 4开始数据传输与数据通过传输缓冲区空中断。 5从源缓冲区复制数据到SPI数据寄存器进行传输。 6通过传输缓冲区空中断完成数据传输。 7禁用发射机。 8禁用接收机。 9禁用中断。 参数介绍 p_api_ctrlPointer to the control structure.p_srcPointer to the source buffer.lengthThe number of bytes to transfer.bit_widthInvalid for SCI_SPI (Set to SPI_BIT_WIDTH_8_BITS). 返回值 FSP_SUCCESSWrite operation successfully completed.FSP_ERR_ASSERTIONOne of the following invalid parameters passed: Pointer p_api_ctrl is NULLPointer to source is NULLLength is equal to 0Bit width is not equal to 8 bitsFSP_ERR_NOT_OPENThe channel has not been opened. Open the channel first.FSP_ERR_UNSUPPORTEDThe given bit_width is not supported.FSP_ERR_IN_USEA transfer is already in progress. 3.2 应用函数接口
3.2.1 SPI初始化函数 代码第25行调用R_SCI_SPI_Open函数初始化SPI接口 3.2.2 读数据接口 代码第48行调用R_SCI_SPI_Read接口读取数据 代码第50行等待数据读取完成 3.2.3 写数据接口 代码第37行调用R_SCI_SPI_Write接口写数据 代码第39行等待写数据完成 3.2.4 回调函数 代码第14行检测传输数据事件 代码第15行数据传输完成传输数据控制字置位 3.2.5 SPI应用程序源代码 /*FILE NAME : bsp_spi.cDescription: generate pwm by timerAuthor : tangmingfei2013126.comDate : 2024/06/03*/#include bsp_spi.h
#include hal_data.hstatic volatile bool g_transfer_complete false;
void g_spi0_callback (spi_callback_args_t * p_args)
{if (SPI_EVENT_TRANSFER_COMPLETE p_args-event){g_transfer_complete true;}
}void sci_spi_basic_init (void)
{fsp_err_t err FSP_SUCCESS;/* Initialize the SPI module. */err R_SCI_SPI_Open(g_spi0_ctrl, g_spi0_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS err);
}void hal_spi_writebyte( uint8_t byte )
{fsp_err_t err FSP_SUCCESS;uint8_t buff[1];g_transfer_complete false;buff[0] byte;err R_SCI_SPI_Write(g_spi0_ctrl, buff, 1, SPI_BIT_WIDTH_8_BITS);assert(FSP_SUCCESS err);while (false g_transfer_complete);
}uint8_t hal_spi_readbyte(void)
{fsp_err_t err FSP_SUCCESS;uint8_t buff[1];g_transfer_complete false;err R_SCI_SPI_Read( g_spi0_ctrl, buff, 1, SPI_BIT_WIDTH_8_BITS);assert(FSP_SUCCESS err);while (false g_transfer_complete);return buff[0];
}/* End of this file */
3.3 LCD驱动程序实现
3.3.1 驱动代码
LCD的驱动代码在改文章中已经实现
使用SPI驱动串行LCD的驱动实现(STM32F4)_spilcd-CSDN博客
这里只需修改SPI相关的接口即可和LCD相关的代码不需要修改直接引用。
修改和MCU相关的底代码
1SPI接口代码。这里需要编写读写数据函数其函数原型如下 源代码
void SPI_WriteByte(uint8_t byte)
{hal_spi_writebyte(byte);
} uint8_t SPI_ReadByte(void)
{return hal_spi_readbyte();
}
2其他IO库配置 源代码
#include stdlib.h
#include stdio.h
#include bsp_spi.h
#include hal_data.h#define LCD_CS_CLR R_IOPORT_PinWrite(g_ioport_ctrl, BSP_IO_PORT_01_PIN_05, BSP_IO_LEVEL_LOW)
#define LCD_CS_SET R_IOPORT_PinWrite(g_ioport_ctrl, BSP_IO_PORT_01_PIN_05, BSP_IO_LEVEL_HIGH)#define LCD_RST_CLR R_IOPORT_PinWrite(g_ioport_ctrl, BSP_IO_PORT_01_PIN_06, BSP_IO_LEVEL_LOW)
#define LCD_RST_SET R_IOPORT_PinWrite(g_ioport_ctrl, BSP_IO_PORT_01_PIN_06, BSP_IO_LEVEL_HIGH)#define LCD_RS_CLR R_IOPORT_PinWrite(g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_LOW)
#define LCD_RS_SET R_IOPORT_PinWrite(g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_HIGH)
3.3.2 测试代码实现 代码第341行初始化SPI接口 代码第343行初始化LCD 源代码
void disp_init(void)
{sci_spi_basic_init();/*You code here*/LCD_Init();LCD_direction(0);LCD_Clear(GREEN);
}
编写一个改变屏幕颜色变化的测试函数
void lcd_test( void )
{uint16_t color_list[6] {BRRED, BLUE, MAGENTA, RED, YELLOW, GREEN};static int index 0;LCD_Clear( color_list[index] );index;R_BSP_SoftwareDelay( 1, BSP_DELAY_UNITS_SECONDS);if( index 6 )index 0;
}
4 测试结果
1改变屏幕的颜色粉色 2改变屏幕的颜色蓝色