stm32f103控制ch375串口方式问题

请问初始化CH375为主机模式时,CH375一直无数据返回给单片机是什么原因?无论写入什么命令,都无数据返回。


void CH375_WR_CMD_PORT( unsigned char cmd ) { 

u8 aCmd;

if(USART_GetFlagStatus(USART2, USART_FLAG_TXE)!=RESET)

{

aCmd = 0x100 | cmd;

USART_SendData(USART2, aCmd);

delay_us(200);

}

}


void CH375_WR_DAT_PORT( unsigned int dat ) {  

unsigned int aData;

if(USART_GetFlagStatus(USART2, USART_FLAG_TXE)!=RESET)

{

aData = 0xff & dat;

USART_SendData(USART2, aData);

delay_us(200);

}

}


unsigned int CH375_RD_DAT_PORT() {  

unsigned int dat;

while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==RESET);

dat = USART_ReceiveData(USART2);

USART_ClearFlag(USART2,USART_FLAG_RXNE);

return(dat);

}




unsigned char mWaitInterrupt() {  

unsigned char c;

CH375_INT_WIRE=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);

while( CH375_INT_WIRE );  

CH375_WR_CMD_PORT( CMD_GET_STATUS );  

c = CH375_RD_DAT_PORT( );  

if ( c == USB_INT_DISCONNECT ) mDeviceOnline = 0; 

else if ( c == USB_INT_CONNECT ) mDeviceOnline = 1; 

return( c );

}




unsigned charmCH375Init( )

{

unsigned chari,c;

CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); 

CH375_WR_DAT_PORT( 6 ); 

for ( i = 0xff; i != 0; i -- ) {

c = CH375_RD_DAT_PORT( );

if ( c == CMD_RET_SUCCESS ) break;

}

if ( i != 0 ) return( TRUE );  

else return( FALSE ); 

}


晶振是否起振?V3引脚在电源电压为5V时通过103电容接地,在3.3V供电时,直接连接到3.3V电源上


晶振已经起振,V3引脚是直接连接到3.3V电源上的,我用三线制,INT引脚是必须要接地或者低电平吗,然后这CH375是可以用3.3V供电吧


下面代码为ch375部分设置,在 c = CH375_RD_DAT_PORT( );  这句一直无法通过,因为无法获取返回值,就一直处理等待状态。


        CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); 

CH375_WR_DAT_PORT( 6 );  

delay_us(20);

CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); 

CH375_WR_DAT_PORT( 0x55 );  

c = CH375_RD_DAT_PORT( );  

if ( c != 0xaa ) {  

for ( i = 100; i != 0; i -- ) {  

CH375_WR_CMD_PORT( CMD_RESET_ALL ); 

c = CH375_RD_DAT_PORT( ); 

}

delay_ms(50);

}



邮件上:软件上,R引脚配置成浮空?INT脚配置成特殊功能脚?  修改一下。


现在用的是串口查询,硬件上把INT引脚直接接地了,R引脚试了用其它输入方式也一样,配置成浮空输入时将R和T引脚短接收发都正确


请问下这是别人论文中关于写命令的函数,用的stm32f103,写之前有个GetReady是什么的准备,有人知道吗?

write.pngspacer.gif


已经找到原因了


什么原因?


CH375串口波特率默认是4800吧,软件配置的stm32波特率为9600,现在可以有数据返回了,但发送命令返回后的值都为0xff


请问ch375串口方式时,区分发送命令还是发送数据是根据第九位是1还是0吧


                           

请问ch375串口方式时,区分发送命令还是发送数据是根据第九位是1还是0吧

                       


是的,详见CH375DS1.PDF 第9页6.2.2 串口部分


大佬,这个照你这样配置,初始化都不行啊,可以指导一下吗


您好,STM32操作CH375进行初始化的步骤为,初始化GPIO,初始化USART,然后就是配置接口函数。接口函数可以参考下面的设置。可以参考链接http://www.wch.cn/index.php/bbs/thread-65122-1.html中的STM例程的第三个

1.

void xWriteCH375Cmd( unsigned char mCmd )       /* 写CH375命令码 */
{
    USART_SendData(CH375_UART, (uint16_t)mCmd|0x0100);
    while(USART_GetFlagStatus(CH375_UART,USART_FLAG_TC)==RESET);
    mDelayuS(3);
}

2.

void xWriteCH375Data( unsigned char mData )     /* 写375数据 */
{
    USART_SendData(CH375_UART, (uint16_t)mData);
    while(USART_GetFlagStatus(CH375_UART,USART_FLAG_TC)==RESET);
    mDelayuS(2);
}

3.

unsigned char xReadCH375Data( void )    
{    
    while(USART_GetFlagStatus(CH375_UART,USART_FLAG_RXNE)==RESET);
    return( (uint8_t)USART_ReceiveData(CH375_UART) );
}



只有登录才能回复,可以选择微信账号登录