OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7868|回复: 6

stm32单片机并口与CH376通信

[复制链接]

6

主题

22

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-8-25
在线时间
12 小时
发表于 2016-8-25 20:59:33 | 显示全部楼层 |阅读模式
13金钱
我现在在做STM33F103ZE板子和CH376通信,想通过八位并口给CH376发送数据,然后读取反馈的数据我想用原子哥这个函数 ,但是不知道这个地址该怎么写,就是想让D0-D7口一个字节的数据,然后再从D0-D7口读取反馈的数据,D0-D7的这个地址应该怎么写,初学有点搞不懂,还请各位大神指点
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{
        for(;n!=0;n--)  
        {                                                                                    
                *(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;         
                WriteAddr++;
                pBuffer++;
        }  

最佳答案

查看完整内容[请看2#楼]

请参照我下边的STM32并口与CH375的通信: #define CH375_BASE (0x60000000UL | 0x0C100000UL) /** ------------------------------------------------------------------ **注意: CH375芯片CMD/DAT选择线A0----->连接到FSMC总线的A2地址线上 ------------------------------------------------------------------ CH375: A0--->地址线输入,区分命令口与数据口 当A0=1 时可以写命令, 当A0=0 时可 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1276
金钱
1276
注册时间
2016-5-31
在线时间
499 小时
发表于 2016-8-25 20:59:34 | 显示全部楼层
请参照我下边的STM32并口与CH375的通信: FSMC_CH375.jpg

#define CH375_BASE        (0x60000000UL | 0x0C100000UL)

/**
------------------------------------------------------------------
**注意: CH375芯片CMD/DAT选择线A0----->连接到FSMC总线的A2地址线上
------------------------------------------------------------------
CH375: A0--->地址线输入,区分命令口与数据口
       当A0=1 时可以写命令,
                         当A0=0 时可以读写数据
******************************************************************
*/
#define CH375_DAT_PORT  (*((volatile unsigned short *)(CH375_BASE)))
#define CH375_CMD_PORT  (*((volatile unsigned short *)(CH375_BASE+8)))

//PE0.2 连接CH375的INT#引脚,用于查询中断状态
#define  CH375_INT_WIRE  GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_2)



/****************************************************************************       
* 功    能:向CH375的命令端口写入命令
*---------------------------------------------------------------------------*
* 说    明:周期不小于4uS,如果单片机较快则延时
* 入口参数:nil
* 出口参数:cmd: 命令
****************************************************************************/

void CH375_WR_CMD_PORT( u8 cmd )
{        
  CH375_CMD_PORT=cmd;
  delay_us(200);
}



/****************************************************************************       
* 功    能:向CH375的数据端口写入数据
*---------------------------------------------------------------------------*
* 说    明:周期不小于1.5uS,如果单片机较快则延时
* 入口参数:nil
* 出口参数:dat: 数据
****************************************************************************/

void CH375_WR_DAT_PORT( u8 dat )
{  
        CH375_DAT_PORT=dat;       
        delay_us(200);  
}



/****************************************************************************       
* 功    能:从CH375的数据端口读出数据
*---------------------------------------------------------------------------*
* 说    明:
* 入口参数:nil
* 出口参数:nil
****************************************************************************/

u8 CH375_RD_DAT_PORT()
{       
        u8        temp_rtn;               
       
        temp_rtn=CH375_DAT_PORT;       

        return( temp_rtn );
}



回复

使用道具 举报

6

主题

22

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-8-25
在线时间
12 小时
 楼主| 发表于 2016-8-26 09:45:24 | 显示全部楼层
xfcjava3 发表于 2016-8-25 21:49
请参照我下边的STM32并口与CH375的通信:

#define CH375_BASE        (0x60000000UL | 0x0C100000UL)

大哥,那个FSMC函数是怎么配置的?
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-8-25
在线时间
12 小时
 楼主| 发表于 2016-8-26 09:50:47 | 显示全部楼层
初学者P 发表于 2016-8-26 09:45
大哥,那个FSMC函数是怎么配置的?

还有那个CH375_NCS 是哪个脚
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-8-25
在线时间
12 小时
 楼主| 发表于 2016-8-26 09:53:23 | 显示全部楼层
哥留个联系方式吧
回复

使用道具 举报

15

主题

172

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1276
金钱
1276
注册时间
2016-5-31
在线时间
499 小时
发表于 2016-8-26 14:24:45 | 显示全部楼层
我的联系方式: QQ:390350125

请看下面的东西:
    FSMC_1G139.jpg

FSMC配置如下:
  /*******************************************************************************
* Function Name  : FSMC_NOR_Init
* Description    : Configures the FSMC and GPIOs to interface with the NOR memory.
*              This function must be called before any write/read operation
*                  on the NOR.
* Input        : None
* Output         : None
* Return         : None
*******************************************************************************/
void FSMC_NOR_Init(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
  GPIO_InitTypeDef GPIO_InitStructure;


  /* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF |
                         RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO , ENABLE);
  
  /*-- GPIO Configuration -----------------   -------------------------------------*/
  /* NOR Data lines configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
                                GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 |
                                GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_Init(GPIOE, &GPIO_InitStructure);


  /* NOR Address lines configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
                                GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 |
                                GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_Init(GPIOF, &GPIO_InitStructure);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |
                                GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;                           
  GPIO_Init(GPIOG, &GPIO_InitStructure);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_Init(GPIOD, &GPIO_InitStructure);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
  GPIO_Init(GPIOE, &GPIO_InitStructure);


  /* NOE and NWE configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_Init(GPIOD, &GPIO_InitStructure);


  /* NE2 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_Init(GPIOG, &GPIO_InitStructure);


  /*-- FSMC Configuration ----------------------------------------------------*/
  p.FSMC_AddressSetupTime = 0x02;
  p.FSMC_AddressHoldTime = 0x00;
  p.FSMC_DataSetupTime = 0x05;
  p.FSMC_BusTurnAroundDuration = 0x00;
  p.FSMC_CLKDivision = 0x00;
  p.FSMC_DataLatency = 0x00;
  p.FSMC_AccessMode = FSMC_AccessMode_B;


  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;


  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);


  /* Enable FSMC Bank1_NOR Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
}




/*******************************************************************************
*        函数名: LCD_CtrlLinesConfig
*        参  数: 无
*        返  回: 无
*        功  能: 配置LCD控制口线,FSMC管脚设置为复用功能
*/
static void LCD_CtrlLinesConfig(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* 使能 FSMC, GPIOD, GPIOE, GPIOF, GPIOG 和 AFIO 时钟 */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD |
                    RCC_APB2Periph_GPIOE |RCC_APB2Periph_GPIOF|
                 RCC_APB2Periph_GPIOG |RCC_APB2Periph_AFIO, ENABLE);
       
       
 //设置PB1为推挽输出:显示控制信号
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;                              
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
       
   GPIO_SetBits(GPIOB,GPIO_Pin_1 );//显示控制信号:1-ON;0-OFF       
       

  /* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
   PD.10(D15), PD.14(D0), PD.15(D1) as alternate
   function push pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
                                GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
                                GPIO_Pin_15;  
                                                                                                                               
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  /* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
  PE.14(D11), PE.15(D12) as alternate function push pull */       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
                                GPIO_Pin_15;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  /* Set PF.00(A0 (RS)) as alternate function push pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_Init(GPIOF, &GPIO_InitStructure);

  //Set PE.03(A19)+PG.12(NE4)--->1G139译码--->产生LCD_CS信号
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;               
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  /* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_Init(GPIOG, &GPIO_InitStructure);
       
}

/*******************************************************************************
*        函数名: LCD_FSMCConfig
*        参  数: 无
*        返  回: 无
*        功  能: 配置FSMC并口访问时序
*/
static void LCD_FSMCConfig(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;

/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 4 ----------------------------------------*/
  /* FSMC_Bank1_NORSRAM4 configuration */
   p.FSMC_AddressSetupTime = 2;
   p.FSMC_AddressHoldTime = 0;
   p.FSMC_DataSetupTime = 5;
   p.FSMC_BusTurnAroundDuration = 0;
   p.FSMC_CLKDivision = 0;
   p.FSMC_DataLatency = 0;
   p.FSMC_AccessMode = FSMC_AccessMode_B;

  /* Color LCD configuration ------------------------------------
     LCD configured as follow:
        - Data/Address MUX = Disable
        - Memory Type = SRAM
        - Data Width = 16bit
        - Write Operation = Enable
        - Extended Mode = Enable
        - Asynchronous Wait = Disable */
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  

  /* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
}


/*******************************************************************************
*        函数名: LCD_Init
*        参  数: 无
*        返  回: 无
*        功  能: 初始化TFT显示器
*/
void QPY8060_LCD_Init(void)
{               
        /* 配置LCD控制口线GPIO */
        LCD_CtrlLinesConfig();

        /* 配置FSMC接口,数据总线 */
        LCD_FSMCConfig();

        /* FSMC重置后必须加延迟才能访问总线设备  */       
        DelayNS(200);
}


int LCD_L0_Init(void)
{
  QPY8060_LCD_Init();
  return 0;
}



void main (void)
{
   ......

   SRAM_Init();  //初始化外部SRAM
   External_SDRAM_Clear();
       
   FSMC_NOR_Init();            //Configure FSMC Bank1 NOR/SRAM2       
   FSMC_NOR_ReadID(&NOR_ID);        
   FSMC_NOR_ReturnToReadMode();//读完ID后,必须返回读模式  
               
   GUI_Init(); //GUI初始化时--调用LCD_L0_Init()               
               
   flag_ch375_int=CH375_Init(); //初始化CH375
       
   if(flag_ch375_int)
        printf("CH375B chip init successful...\n\r");
   else
        printf("CH375B chip init failure...\n\r");       

   ......

}

       


回复

使用道具 举报

11

主题

81

帖子

0

精华

高级会员

Rank: 4

积分
652
金钱
652
注册时间
2012-8-1
在线时间
68 小时
发表于 2016-10-12 13:19:19 | 显示全部楼层
谢谢分享经验!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 01:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表