- 打卡等级:初来乍到
- 打卡总天数:6
- 最近打卡:2026-03-14 12:05:16
已绑定手机
注册会员
- 积分
- 138
|
发表于 2026-3-8 13:24:44
|
显示全部楼层
uint8_t xdata pu8SPIDMATxBuffer[1024]; //SPI DMA发送缓冲区数组
////////////////////////////////////////
// SPI DMA中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void DMA_SPI_ISR(void) interrupt DMA_SPI_VECTOR
{
//<<AICUBE_USER_SPI_ISR_CODE2_BEGIN>>
// 在此添加中断函数用户代码
if (DMA_SPI_CheckFlag()) //判断SPI DMA中断
{
DMA_SPI_ClearFlag(); //清除SPI DMA中断标志
DMA_SPI_ClearFIFO(); //清空SPI DMA FIFO缓冲区
fSPIDMABusy=0;
}
//<<AICUBE_USER_SPI_ISR_CODE2_END>>
}
////////////////////////////////////////
// 发送OLED数据
// 入口参数: dat (数据序列)
// len (数据长度)
// 函数返回: 无
////////////////////////////////////////
void OLED_SPI_SendData(uint8_t *dat, uint16_t len)
{
memcpy(pu8SPIDMATxBuffer, dat, len); //将数据复制到DMA缓冲区
while(fSPIDMABusy);
DMA_SPI_SetAmount(len - 1); //设置DMA发送字节数
DMA_SPI_MasterTrigger(); //触发SPI主机DMA
fSPIDMABusy=1;
OLED_DC = 1;
}
void OLED_WR_CMD(uint8_t *cmd, uint16_t len)
{
OLED_DC = 0; //写命令
OLED_SPI_SendData(cmd, len);
}
////////////////////////////////////////
// 写OLED数据
// 入口参数: dat (数据序列)
// len (数据长度)
// 函数返回: 无
////////////////////////////////////////
void OLED_WR_DAT(uint8_t *dat, uint16_t len)
{
OLED_DC = 1; //写数据
OLED_SPI_SendData(dat, len);
}
void OLED_BuffShow(void)
{
#if(OLED_SPI_DMA==0)
u8 xdata i;
u8 xdata n;
for(i=0;i<8;i++)
{
OLED_WR_Byte((u8)(0xb0+i),OLED_CMD); //设置行起始地址
OLED_WR_Byte(0x02,OLED_CMD); //设置低列起始地址 +2右侧屏幕不再漏光
OLED_WR_Byte(0x10,OLED_CMD); //设置高列起始地址
for(n=0;n<128;n++)
OLED_WR_Byte(ShowBUFF[n],OLED_DATA);
}
#else
/*************************************************************
u8 xdata cmd[3];
cmd[1]=0x02;//设置低列起始地址 +2右侧屏幕不再漏光
cmd[2]=0x10;//设置高列起始地址
for(i=0;i<8;i++)
{
cmd[0]=(u8)(0xb0+i);
OLED_WR_CMD(&cmd[0],3);
OLED_WR_DAT(&ShowBUFF[0],128);
} 使用这段一定能成功
******************************************************************/
uint8_t xdata cmd[8];
//uint8_t xdata *data buf;
//buf=cmd;
cmd[0]=0x20;
cmd[1]=0x00;
cmd[2]=0x21;
cmd[3]=0x02;
cmd[4]=0x81;
cmd[5]=0x22;
cmd[6]=0x00;
cmd[7]=0x07;
OLED_WR_CMD(&cmd[0],8);
OLED_WR_DAT(&ShowBUFF[0][0],1024);使用这段就不能成功
#endif
}
我把SPI-DMA包装了一下,包装成 命令DMA和数据DMA,
ShowBUFF[8][128]定义在 xdata ???????????????????????????请耐心看下,指导一下
一下发送1024 就是搞不定
|
|