OpenEdv-开源电子网

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

STM32F417采用ZLG9518S通过SPI扩展串口,不通,请问有没有遇到相关情况的?请高手指导!谢谢!

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-11-14
在线时间
0 小时
发表于 2016-11-14 10:01:05 | 显示全部楼层 |阅读模式
1金钱
STM32F417采用ZLG9518S通过SPI扩展串口,不通,请问有没有遇到相关情况的?请高手指导!谢谢!

1.       ZLG9518S与STM32管脚映射:
XM_RST                      GPIOB      GPIO_Pin_0
XM_REN                      GPIOC      GPIO_Pin_4
XM_IRQ                      GPIOC      GPIO_Pin_5
XM_SCK                     
XM_MOSI                            GPIOA      GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
XM_MISO
XM_CS                         GPIOA      GPIO_Pin_4
2.       按照提供的测试例程,有正常的方波输出
3.       ZLG9518s和STM32的SPI初始化
Void BringVision_SPI_Init()
{        
                   GPIO_InitTypeDefGPIO_InitStructure;
                   SPI_InitTypeDefSPI_InitStructure;
//复位ZLG9518S----------------------1.复位ZLG9518S
                   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//使能GPIOF时钟
                   //GPIOB0初始化设置
                   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                    //
                   GPIO_InitStructure.GPIO_Mode     = GPIO_Mode_OUT;         //普通输出模式
                   GPIO_InitStructure.GPIO_OType    = GPIO_OType_PP;           //推挽输出
                   GPIO_InitStructure.GPIO_Speed     = GPIO_Speed_100MHz;//100MHz
                   GPIO_InitStructure.GPIO_PuPd       = GPIO_PuPd_UP;             //上拉
                   GPIO_Init(GPIOB,&GPIO_InitStructure);                          //初始化GPIOB
                   GPIO_ResetBits(GPIOB,GPIO_Pin_0);                                //拉低复位管脚,复位ZLG9518S
                  
                  
                   //GPIOFB5,6,7设置成高组态,即输入----2.设置SPI为输入
                   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOB时钟
                   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;  
                   GPIO_InitStructure.GPIO_Mode     = GPIO_Mode_IN;//输入
                   GPIO_InitStructure.GPIO_Speed     = GPIO_Speed_100MHz;//100MHz
                   GPIO_InitStructure.GPIO_PuPd       = GPIO_PuPd_UP;//上拉
                   GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化         
                  
                           
                   //GPIOFC4,ZLG9518sREN管脚----------3.设置REN为输入,IRQ为输入
                   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);//使能GPIOB时钟
                   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5;//PC4功能输入
                   GPIO_InitStructure.GPIO_Mode     = GPIO_Mode_IN;//输入
                   GPIO_InitStructure.GPIO_Speed     = GPIO_Speed_100MHz;//100MHz
                   GPIO_InitStructure.GPIO_PuPd       = GPIO_PuPd_UP;//上拉
                   GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化
                  
                   //CS---------------------------------4.初始化CS为输出,并拉高CS片选
                   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//
                   GPIO_InitStructure.GPIO_Pin= GPIO_Pin_4;                    //PA4
                   GPIO_InitStructure.GPIO_Mode= GPIO_Mode_OUT;             //输出
                   GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;               //推挽输出
                   GPIO_InitStructure.GPIO_Speed= GPIO_Speed_100MHz;    //100MHz
                   GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP;                   //上拉
                   GPIO_Init(GPIOA,&GPIO_InitStructure);                                    //初始化
                  
                   PAout(4)= 1;             //ZLG9518S片选拉高
                  
                   //-----------------------------------5.释放ZLG9518S复位
                   GPIO_SetBits(GPIOB,GPIO_Pin_0);
                  
                   //延时500ms以上----------------------6.等待至少500ms
                   delay_ms(600);
                   //GPIOFB3,4,5初始化设置--SPI---------7.开始正常初始化SPI操作
                   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOB时钟
                   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);//使能SPI1时钟
                   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PB3~5复用功能输出
                   GPIO_InitStructure.GPIO_Mode     = GPIO_Mode_AF;//复用功能
                   GPIO_InitStructure.GPIO_OType    = GPIO_OType_PP;//推挽输出
                   GPIO_InitStructure.GPIO_Speed     = GPIO_Speed_100MHz;//100MHz
                   GPIO_InitStructure.GPIO_PuPd       = GPIO_PuPd_UP;//上拉
                   GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
                   GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1);//PB5复用为 SPI1
                   GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1);//PB6复用为 SPI1
                   GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1);//PB7复用为 SPI1
                   //这里只针对SPI口初始化
                   RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);      //复位SPI1
                   RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);//停止复位SPI1
                   SPI_InitStructure.SPI_Direction        = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
                   SPI_InitStructure.SPI_Mode                                =SPI_Mode_Master;                //设置SPI工作模式:设置为主SPI
                   SPI_InitStructure.SPI_DataSize                          = SPI_DataSize_16b;                 //设置SPI的数据大小:SPI发送接收8位帧结构
                   SPI_InitStructure.SPI_CPOL                                 =SPI_CPOL_High;             //串行同步时钟的空闲状态为高电平
                   SPI_InitStructure.SPI_CPHA                                =SPI_CPHA_2Edge;         //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
                   SPI_InitStructure.SPI_NSS                                    =SPI_NSS_Soft;                 //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
                   SPI_InitStructure.SPI_BaudRatePrescaler= SPI_BaudRatePrescaler_16;               //定义波特率预分频的值:波特率预分频值为256
                   SPI_InitStructure.SPI_FirstBit                    = SPI_FirstBit_MSB;         //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
                   SPI_InitStructure.SPI_CRCPolynomial     = 7;  //CRC值计算的多项式
                   SPI_Init(SPI1,&SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
                   SPI_Cmd(SPI1,ENABLE); //使能SPI外设
                   //8.拉低CS,并一直保持拉低状态,后续操作一直保持为0不变
PAout(4) = 0;
}
4.       串口操作
1
voids2u_configure_one_uart(uint8_t uart_chan)
{
uint16_t cmd_buf[2];
uint8_t data;
data =S2UC_LCR1_PUT_BAUD_BIT(S2UC_LCR1_BAUD_115200)
            | S2UC_LCR1_PUT_CTS_BIT(S2UC_LCR1_CTS_ON)                        
            | S2UC_LCR1_PUT_RTS_BIT(S2UC_LCR1_RTS_ON)              
            |S2UC_LCR1_PUT_FIFO_ENINT_BIT(S2UC_LCR1_INT_DIS)        
            | S2UC_LCR1_PUT_STREAM_ENINT_BIT(S2UC_LCR1_INT_EN)
            |S2UC_LCR1_PUT_ERR_ENINT_BIT(S2UC_LCR1_INT_DIS);
zlg9518s_send_write_cmd(ZLG9518S_LCR1_REG,uart_chan, data, cmd_buf);
data = S2UC_LCR0_PUT_STATE_BIT(S2UC_LCR0_ON_STATE)
            | S2UC_LCR0_PUT_DLEN_BIT(S2UC_LCR0_8_BIT_DATA)
            | S2UC_LCR0_PUT_PARITY_BIT(S2UC_LCR0_PARITY_NONE)
            | S2UC_LCR0_PUT_STOP_BIT(S2UC_LCR0_STOP_1_BIT);
zlg9518s_send_write_cmd(ZLG9518S_LCRO_REG,uart_chan, data, cmd_buf);
data =S2UC_TCR_PUT_STREAM_START_BIT(S2UC_TCR_STREAM_32_BYTE_MAX255)
            |S2UC_TCR_PUT_STREAM_END_BIT(S2UC_TCR_STREAM_224_BYTE_MAX255);
zlg9518s_send_write_cmd(ZLG9518S_TCR_REG,uart_chan, data, cmd_buf);
data =S2UC_TLR_PUT_RFIFO_INT_BIT(S2UC_TCR_STREAM_224_BYTE_MAX255)
            |S2UC_TLR_PUT_TFIFO_INT_BIT(S2UC_TCR_STREAM_240_BYTE_MAX255);  
zlg9518s_send_write_cmd(ZLG9518S_TLR_REG,uart_chan, data, cmd_buf);
}
2
voids2u_send_data_one_uart(uint8_t uart_chan)
{
uint16_t cmd_buf[2];
uint8_t data;
for (data = 0; data < 255; data++) {
           zlg9518s_send_write_cmd(ZLG9518S_THR_REG,uart_chan, data, cmd_buf);
}
}
3)操作流程
BringVision_SPI_Init();
s2u_configure_one_uart(UART_CHAN_0);
s2u_send_data_one_uart (UART_CHAN_0);


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-11-14
在线时间
0 小时
 楼主| 发表于 2016-11-14 10:04:13 | 显示全部楼层
我在用的过程中,通过示波器抓取SPI信号,分析觉得SPI输出本身应该没有问题,但是ZLG9518一直不通;ZLG提供的例程是基于另一个平台,所以怀疑是和STM32配合出现了问题,但是文档里又没有说清楚,所以想问问用过的大神,给点建议,谢谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-10 08:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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