打印
[MCU]

STM8+SI4464

[复制链接]
1629|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangchuanwei|  楼主 | 2017-6-21 11:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wangchuanwei|  楼主 | 2017-6-21 11:58 | 只看该作者
void SI446X_PART_INFO( u8 *buffer )
{
    u8 cmd = PART_INFO;

    SI446X_CMD( &cmd, 1 );
    SI446X_READ_RESPONSE( buffer, 8 );

}

void SI446X_INT_STATUS( u8 *buffer )
{
    u8 cmd[4];
    cmd[0] = GET_INT_STATUS;
    cmd[1] = 0;
    cmd[2] = 0;
    cmd[3] = 0;
    SI446X_CMD( cmd, 4 );
    SI446X_READ_RESPONSE( buffer, 9 );
}

使用特权

评论回复
板凳
wangchuanwei|  楼主 | 2017-6-21 11:59 | 只看该作者
SI446X_PART_INFO  可以读取芯片信息 4464
   SI446X_INT_STATUS( buffer );
        if( buffer[3] & ( 1<<4 ) )
          {
            //收到一个数据包,翻转LED
然后就进入接受模式之后  就一直读取中断寄存器那里,就是收不到数据。

使用特权

评论回复
地板
wangchuanwei|  楼主 | 2017-6-21 16:57 | 只看该作者

使用特权

评论回复
5
694844985| | 2017-6-22 09:05 | 只看该作者
你初始化配置有问题,你有没有进行接收初始化,然后清中断

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
wangchuanwei + 2 很给力!
6
wangchuanwei|  楼主 | 2017-6-22 09:38 | 只看该作者
694844985 发表于 2017-6-22 09:05
你初始化配置有问题,你有没有进行接收初始化,然后清中断

SI446X_INT_STATUS() 这个函数就是清中断 然后读取中断状态的, 这个命令就可以清除中断,

使用特权

评论回复
7
wangchuanwei|  楼主 | 2017-6-22 09:39 | 只看该作者
694844985 发表于 2017-6-22 09:05
你初始化配置有问题,你有没有进行接收初始化,然后清中断

大哥,您知不知道SI4463和SI4464用起来有没有区别,我这代码demo是模块厂商给的,后来我们自己画的板子,买的SI4464

使用特权

评论回复
8
wangchuanwei|  楼主 | 2017-6-22 09:40 | 只看该作者
void SI446X_START_RX( u8 channel, u8 condition, u32 rx_len,
                      u8 n_state1, u8 n_state2, u8 n_state3 )
{
    unsigned char cmd[8];
    SI446X_RX_FIFO_RESET( );
    SI446X_TX_FIFO_RESET( );

    SI446X_CHANGE_STATE( 2 );
    while( SI446X_GET_DEVICE_STATE( ) != 2 );
    SI446X_CHANGE_STATE( 6 );
    while( SI446X_GET_DEVICE_STATE( ) != 6 );
    cmd[0] = START_RX;
    cmd[1] = channel;
    cmd[2] = condition;
    cmd[3] = rx_len>>8;
    cmd[4] = rx_len;
    cmd[5] = n_state1;
    cmd[6] = n_state2;
    cmd[7] = n_state3;
    SI446X_CMD( cmd, 8 );
}
这个是接收初始化的函数

使用特权

评论回复
9
wangchuanwei|  楼主 | 2017-6-22 09:45 | 只看该作者
int main( void )
{
    u8 i,length;
    BSP_INIT ( );
    SI446X_RESET( );   
   
    //SI446X 模块复位
    SI446X_CONFIG_INIT( );                          //寄存器初始化,寄存器来自WDS配置的头文件
    //SI446X_SET_POWER( 0x7F );                       //将输出功率配置为最大
    SI446X_START_RX( 0, 0, PACKET_LENGTH,0,8,8 );   //进入接收模式,参数定义详见API手册
  while (1)
  {
       //读取寄存器状态
        SI446X_INT_STATUS( buffer );
        if( buffer[3] & ( 1<<4 )  )       //收到数据            
          {
           length = SI446X_READ_PACKET( buffer );
            //收到的数据是0-9,比较是否收到正确。
            for( i = 0;  i < 10; i ++ )
            {
                if( buffer[i] != i )

、、我在main函数  初始化之后,循环里面直接读取寄存器状态,然后看有没有收到数据,这样不可以么

使用特权

评论回复
10
wangchuanwei|  楼主 | 2017-6-22 10:15 | 只看该作者
int main( void )
{
    u8 i,length;
    BSP_INIT ( );
    SI446X_RESET( );   
   
    //SI446X 模块复位
    SI446X_CONFIG_INIT( );                          //寄存器初始化,寄存器来自WDS配置的头文件
    //SI446X_SET_POWER( 0x7F );                       //将输出功率配置为最大
    SI446X_START_RX( 4, 4, PACKET_LENGTH,0,8,8 );   //进入接收模式,参数定义详见API手册
  while (1)
  {
       //读取寄存器状态
        SI446X_INT_STATUS( buffer );
        if( buffer[3] & ( 1<<4 )  )       //收到数据            
          {
           length = SI446X_READ_PACKET( buffer );
            //收到的数据是0-9,比较是否收到正确。
            for( i = 0;  i < 10; i ++ )
            {
                if( buffer[i] != i )
                {
                  
                    break;
                }
            }
              return 0;
          }
        else SI446X_START_RX( 4, 4, PACKET_LENGTH,0,8,8 );
  }
}



手动置顶,跪求大神,

使用特权

评论回复
11
694844985| | 2017-6-22 13:23 | 只看该作者
你没有用irq中断引脚么,中断来了才能有数据来,另外你进入接收模式后有没有清中断

使用特权

评论回复
12
wangchuanwei|  楼主 | 2017-6-22 14:21 | 只看该作者
694844985 发表于 2017-6-22 13:23
你没有用irq中断引脚么,中断来了才能有数据来,另外你进入接收模式后有没有清中断 ...

那个引脚没用,没检测引脚的高低电平

使用特权

评论回复
13
wangchuanwei|  楼主 | 2017-6-26 15:23 | 只看该作者

使用特权

评论回复
14
lingwise| | 2017-7-3 15:21 | 只看该作者
需要配合中断引脚来使用才省单片机资源,要做低功耗更是离不开中断引脚的功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

296

帖子

2

粉丝