99热成人精品热久久6网站_无码中文亚洲AV吉吉影音_国产精品制服一区二区_中文字幕乱码一区二区三区免费

首頁 > 技術(shù)支持 > 應(yīng)用與案例 > 正文
STM32F103C8T6單片機(jī)最小開發(fā)板控制RA8889軟件說明 作者:Harchy   發(fā)表日期:2023-05-17   來源:菱致電子   瀏覽:


上節(jié)介紹了STM32F103C8T6最小開發(fā)板連接RA8889這塊開發(fā)板的硬件連接,接下來介紹一下軟件部份。

RA8889開發(fā)板中,單片機(jī)與其是有連接的,故我們需要先在其上面跑一下初始化,將連接的引腳設(shè)定為浮空狀態(tài),PE7~10做一下初始化設(shè)定。
void GPIO_Configuration_Ex_SPI(void) //外接SPI配置DB4~7/PE7~10為懸空狀態(tài)
{
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);
}
 


開發(fā)板上的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硬件復(fù)位
GPIO_Configuration_Ex_SPI(); //使用外部SPI 4線配置,懸空狀態(tài)

while(1);


這樣做好之后,開發(fā)板的硬件只要按要求接好PS0~2的高低電平,就可以通過外部的單片機(jī)控制板上的RA8889了。



RA8889核心文件先移植進(jìn)來,



配置好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 -> PC13
  GPIO_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:PA8
  GPIO_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,SCK
  GPIO_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; //輸入懸空:MISO
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
GPIO_Init(GPIOB, &GPIO_InitStructure);
 
}


對(duì)SPI進(jìn)行初始化:SPI4_Init();
需要檢查RA8889_MCU_IF.c的代碼,有可能需要作相應(yīng)要變定義。

在這里要強(qiáng)調(diào)一點(diǎn),請(qǐng)確保每個(gè)函數(shù)都有效,通信才可能正常。若有個(gè)別函數(shù)編譯后過不去,那么需要檢查。
#ifdef Serial_4
 
void 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


接下來 對(duì)RA8889進(jìn)行初始化,RA8889_Initial(); 這部份在此不詳細(xì)展開,請(qǐng)參考官方資料說明文檔。


做完之后就可以 執(zhí)行演示代碼,在API_Demo();里面,查看各種顯示效果了!

下載鏈接:請(qǐng)見附件。提取碼均為 STM-SPI
 




分享到:

相關(guān)熱詞搜索:STM32F103C8T6 RA8889 軟件

上一篇:自建漢字如何通過瑞佑的RA8876/RA8889等液晶控制芯片進(jìn)行顯示
下一篇:第一講 單片機(jī)最小系統(tǒng)通過RA8889驅(qū)動(dòng)彩色液晶屏播放視頻