OpenEdv-开源电子网

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

求助!!!!!

[复制链接]

14

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2018-9-19
在线时间
48 小时
发表于 2018-12-4 16:56:54 | 显示全部楼层 |阅读模式
20金钱
最近遇到个怪现象,我STM8AF5288的板子,利用CAN接收到相应的报文后(一个报文即可),将IO口置高(初始化时为低电平)。而实际测试的时候发现,无论怎样,我IO口都没有被置高,除非我连续发送报文,IO口才会被置高。但是,如果我将IO初始化为高电平,然后接收到报文后,将IO口置低。测试的时候正常,哪怕只接收到一个报文,IO口也会被置低!!  这是为什么????  具体程序如下:

void BSP_Configuration(void);//硬件初始化函数声明
int main(void)
{
  GPIO_Init(GPIOE,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_FAST);   //****PE3->S,can通讯芯片使能端口***//
  GPIO_Init(GPIOC,GPIO_PIN_1,GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOC,GPIO_PIN_2,GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOD,GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_WriteLow(GPIOE, GPIO_PIN_3);  
  BSP_Configuration();//硬件驱动初始化函数
  while(1)
  {

  }
}

void BSP_Configuration(void)
{  
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//时钟速度为内部16M,1分频,
  CAN_Configuration();//调用CAN初始化函数
  rim();//打开总中断
}


void CAN_Configuration(void)
{
    //初始化CAN波特率为1M  
    CAN_Init(CAN_MasterCtrl_AllDisabled,CAN_Mode_Normal,CAN_SynJumpWidth_1TimeQuantum,CAN_BitSeg1_11TimeQuantum,CAN_BitSeg2_4TimeQuantum,1);
    //配置CAN第0组过滤器为屏蔽模式。但是屏蔽位都设置为0,所以相当于没启动屏蔽功能。
    CAN_FilterInit(CAN_FilterNumber_0,ENABLE,CAN_FilterMode_IdMask,CAN_FilterScale_32Bit,0,0,0,0,0,0,0,0);
    //使能CAN接收中断功能
    CAN_ITConfig(CAN_IT_FMP,ENABLE);
}
/*********************************************************************************
*   函 数 名: CAN_RecvData_Demo1
*   功能说明: CAN数据转发实验例程
*   形    参:无
*   返 回 值: 无
*********************************************************************************/
void CAN_RecvData_Demo1(void)
{  GPIO_WriteHigh(GPIOD, GPIO_PIN_0);
   GPIO_WriteHigh(GPIOC, GPIO_PIN_1);
   GPIO_WriteHigh(GPIOC, GPIO_PIN_2);
   GPIO_WriteHigh(GPIOC, GPIO_PIN_3);
    u32 id;
    CAN_Id_TypeDef ide;
    CAN_RTR_TypeDef rtr;
    u8 data[8];
    u8 dlc,i;

    CAN_Receive();//读取缓存中的数据

    id=CAN_GetReceivedId();//读取ID号
    ide=CAN_GetReceivedIDE();//读取帧类型(标准或扩展)
    rtr=CAN_GetReceivedRTR();//读取帧类型(数据或远程)
    dlc=CAN_GetReceivedDLC();//读取接收到的数据字节数

    for(i=0;i<dlc;i++)
    {
        data[i]=CAN_GetReceivedData(i);//把接收到的数据送到自定义数组里   
    }

    if((ide==CAN_Id_Standard)&&(rtr==CAN_RTR_Data)&&(dlc==8))
  {
    if((id!=0x212)&&(data[7]!=0x01))
    {
        GPIO_WriteLow(GPIOD, GPIO_PIN_0);
        GPIO_WriteLow(GPIOC, GPIO_PIN_1);
        GPIO_WriteLow(GPIOC, GPIO_PIN_2);
        GPIO_WriteLow(GPIOC, GPIO_PIN_3);
    }
  }   
}


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

使用道具 举报

8

主题

524

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2807
金钱
2807
注册时间
2016-5-13
在线时间
176 小时
发表于 2018-12-6 11:26:22 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-24 07:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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