STM32F103C8T6单片机最小开发板控制RA8889软件说明
作者:Harchy 发表日期:2023-05-17 来源:菱致电子 浏览:
上节介绍了STM32F103C8T6最小开发板连接RA8889这块开发板的硬件连接,接下来介绍一下软件部份。
RA8889开发板中,单片机与其是有连接的,故我们需要先在其上面跑一下初始化,将连接的引脚设定为浮空状态,PE7~10做一下初始化设定。
void GPIO_Configuration_Ex_SPI(void) //外接SPI配置DB4~7/PE7~10为悬空状态{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOE, &GPIO_InitStructure);}
开发板上的MCU是STM32F103VET6 或者兼容,做一下基本初始化即可:/* System Clocks Configuration */RCC_Configuration();delay_init(72);
GPIO_Configuration();NVIC_Configuration();
/* Enable the FSMC Clock */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);delay_ms(1);RA8889_HW_Reset(); //RA8889硬件复位GPIO_Configuration_Ex_SPI(); //使用外部SPI 4线配置,悬空状态
while(1);
这样做好之后,开发板的硬件只要按要求接好PS0~2的高低电平,就可以通过外部的单片机控制板上的RA8889了。
RA8889核心文件先移植进来,
配置好STM32F103C8T6的GPIO:
GPIO_Configuration();
void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //推挽輸出:LED1 -> PC13GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC, &GPIO_InitStructure);RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //RA8889_RESET:PA8GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_15; //推挽輸出: NSS,MOSI,SCKGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //输入悬空:MISOGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);}
对SPI进行初始化:SPI4_Init();
需要检查RA8889_MCU_IF.c的代码,有可能需要作相应要变定义。
在这里要强调一点,请确保每个函数都有效,通信才可能正常。若有个别函数编译后过不去,那么需要检查。
#ifdef Serial_4void SPI4_Delay(void){unsigned char t;t=Serial_t;while(t!=0){t--;}}void SPI4_Init(void){Set_SPI4_ZCS; // GPIO_SetBits(GPIOE, GPIO_Pin_7);Set_SPI4_SDO; // GPIO_SetBits(GPIOE, GPIO_Pin_8);Set_SPI4_SDA; // GPIO_SetBits(GPIOE, GPIO_Pin_9);Set_SPI4_SCL; // GPIO_SetBits(GPIOE, GPIO_Pin_10);}///******************************************************************************//SPI_Write()//******************************************************************************/void SPI4_Write(unsigned char dat){unsigned char t = 8;Set_SPI4_SDO; //GPIO_SetBits(GPIOE, GPIO_Pin_8);do{if ((dat & 0x80)==0x80){Set_SPI4_SDA;// GPIO_SetBits(GPIOE, GPIO_Pin_9);}else{Reset_SPI4_SDA;//GPIO_ResetBits(GPIOE, GPIO_Pin_9);}dat <<= 1;Reset_SPI4_SCL;//GPIO_ResetBits(GPIOE, GPIO_Pin_10);SPI4_Delay();Set_SPI4_SCL;//GPIO_SetBits(GPIOE, GPIO_Pin_10);SPI4_Delay();} while ( --t != 0 );Set_SPI4_SCL;//GPIO_SetBits(GPIOE, GPIO_Pin_10);Set_SPI4_SDA;//GPIO_SetBits(GPIOE, GPIO_Pin_9);}///******************************************************************************//SPI_Read()//******************************************************************************/unsigned char SPI4_Read(void){unsigned char dat=0;unsigned char temp=0;unsigned char t = 8;do{Reset_SPI4_SCL;//GPIO_ResetBits(GPIOE, GPIO_Pin_10);SPI4_Delay();dat <<= 1;temp=Read_SPI4_SDO;//temp=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_8);if ( temp==0x01 ){dat++;}Set_SPI4_SCL;//GPIO_SetBits(GPIOE, GPIO_Pin_10);SPI4_Delay();} while ( --t != 0 );return dat;}void LCD_DataWrite(unsigned char Data){Reset_SPI4_ZCS;//GPIO_ResetBits(GPIOE, GPIO_Pin_7);Set_SPI4_SDO;//GPIO_SetBits(GPIOE, GPIO_Pin_8);Set_SPI4_SDA;//GPIO_SetBits(GPIOE, GPIO_Pin_9);Set_SPI4_SCL;//GPIO_SetBits(GPIOE, GPIO_Pin_10);SPI4_Write(0x80);SPI4_Write(Data);SPI4_Delay();Set_SPI4_ZCS;//GPIO_SetBits(GPIOE, GPIO_Pin_7);SPI4_Delay();}unsigned char LCD_DataRead(void){unsigned char Data;GPIO_InitTypeDef GPIO_InitStructure;Set_SPI4_SDO;// GPIO_SetBits(GPIOE, GPIO_Pin_8);Set_SPI4_SDA;// GPIO_SetBits(GPIOE, GPIO_Pin_9);Set_SPI4_SCL;// GPIO_SetBits(GPIOE, GPIO_Pin_10);Reset_SPI4_ZCS;// GPIO_ResetBits(GPIOE, GPIO_Pin_7);SPI4_Write(0xc0);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //块腶GPIO_Init(GPIOE, &GPIO_InitStructure);Data = SPI4_Read();GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOE, &GPIO_InitStructure);SPI4_Delay();Set_SPI4_ZCS;//GPIO_SetBits(GPIOE, GPIO_Pin_7);return Data;}unsigned char LCD_StatusRead(void){unsigned char Data;GPIO_InitTypeDef GPIO_InitStructure;Set_SPI4_SDO;// GPIO_SetBits(GPIOE, GPIO_Pin_8);Set_SPI4_SDA;// GPIO_SetBits(GPIOE, GPIO_Pin_9);Set_SPI4_SCL;// GPIO_SetBits(GPIOE, GPIO_Pin_10);Reset_SPI4_ZCS;// GPIO_ResetBits(GPIOE, GPIO_Pin_7);SPI4_Delay();SPI4_Write(0x40);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //块腶GPIO_Init(GPIOE, &GPIO_InitStructure);Data = SPI4_Read();GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOE, &GPIO_InitStructure);SPI4_Delay();Set_SPI4_ZCS;// GPIO_ResetBits(GPIOE, GPIO_Pin_7);return Data;}void LCD_CmdWrite(unsigned char cmd){Set_SPI4_SDO;// GPIO_SetBits(GPIOE, GPIO_Pin_8);Set_SPI4_SDA;// GPIO_SetBits(GPIOE, GPIO_Pin_9);Set_SPI4_SCL;// GPIO_SetBits(GPIOE, GPIO_Pin_10);Reset_SPI4_ZCS;//GPIO_ResetBits(GPIOE, GPIO_Pin_7);SPI4_Delay();SPI4_Write(0x00);SPI4_Write(cmd);SPI4_Delay();Set_SPI4_ZCS;//GPIO_SetBits(GPIOE, GPIO_Pin_7);SPI4_Delay();}#endif
接下来 对RA8889进行初始化,RA8889_Initial(); 这部份在此不详细展开,请参考官方资料说明文档。
做完之后就可以 执行演示代码,在API_Demo();里面,查看各种显示效果了!
下载链接:请见附件。提取码均为 STM-SPI
分享到: