你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F334R8的CAN测试

[复制链接]
zhulikai 提问时间:2016-10-10 15:32 /
STM32F334R8这块芯片的资源好少,我又是个新手需要测试自带的CAN模块,手里只有一块NUCLEO-F334R8的开发板以及一根mini USB程序下载线。在网上也找了很多,利用STM32F3xx_HAL_Driver库中的CAN驱动参考配置,还是实现不了数据的发送,因为只有一块板子,用的是环回测试模式,不知道有没有做过的,谁能提供点帮助,谢谢了
收藏 1 评论13 发布时间:2016-10-10 15:32

举报

13个回答
zhulikai 最优答案 回答时间:2016-10-13 08:53:35
利用查询模式进行CAN的环回模式已经完成,给需要的朋友参考下
int main(void)
{
        static GPIO_InitTypeDef  GPIO_InitStruct;
        static CAN_HandleTypeDef CAN_HandleStruct;
        static CAN_FilterConfTypeDef CAN_FilterConfStruct;
        static CanTxMsgTypeDef CanTxMsgStruct;
        static CanRxMsgTypeDef CanRxMsgStruct;
       
        typedef unsigned          char u8;
        typedef unsigned short     int u16;
        typedef unsigned           int u32;
        typedef unsigned       __int64 u64;
       
        u8 Txbuf[8];
        u8 Rxbuf[8];
        u8 i;
        u8 cnt = 0;
HAL_Init();
SystemClock_Config();
__HAL_RCC_CAN1_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
       
        GPIO_InitStruct.Alternate = GPIO_AF9_CAN;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
        GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
       
        CAN_HandleStruct.Init.ABOM = DISABLE;
        CAN_HandleStruct.Init.AWUM = DISABLE;
        CAN_HandleStruct.Init.BS1 = CAN_BS1_7TQ;
        CAN_HandleStruct.Init.BS2 = CAN_BS2_6TQ;
        CAN_HandleStruct.Init.Mode = CAN_MODE_LOOPBACK;
        CAN_HandleStruct.Init.NART = ENABLE;
        CAN_HandleStruct.Init.Prescaler = 6;
        CAN_HandleStruct.Init.RFLM = DISABLE;
        CAN_HandleStruct.Init.SJW = DISABLE;
        CAN_HandleStruct.Init.TTCM = DISABLE;
        CAN_HandleStruct.Init.TXFP = DISABLE;
       
        CAN_HandleStruct.Instance = CAN;
        CAN_HandleStruct.Lock = HAL_UNLOCKED;
        CAN_HandleStruct.pRxMsg = &CanRxMsgStruct;
        CAN_HandleStruct.pTxMsg = &CanTxMsgStruct;
        HAL_CAN_Init(&CAN_HandleStruct);

        CAN_FilterConfStruct.BankNumber = 0;
        CAN_FilterConfStruct.FilterActivation = ENABLE;
        CAN_FilterConfStruct.FilterFIFOAssignment = CAN_FILTER_FIFO0;
        CAN_FilterConfStruct.FilterIdHigh = 0x0000;
        CAN_FilterConfStruct.FilterIdLow = 0x0000;
        CAN_FilterConfStruct.FilterMaskIdHigh = 0x0000;
        CAN_FilterConfStruct.FilterMaskIdLow = 0x0000;
        CAN_FilterConfStruct.FilterMode = CAN_FILTERMODE_IDMASK;
        CAN_FilterConfStruct.FilterNumber = 0;
        CAN_FilterConfStruct.FilterScale = CAN_FILTERSCALE_32BIT;
       
        HAL_CAN_ConfigFilter(&CAN_HandleStruct, &CAN_FilterConfStruct);
while(1)
        {
                for(i=0;i<=8;i++)
                        {
                                Txbuf[i]=cnt+i;
                        }

                CanTxMsgStruct.DLC = 8;
                CanTxMsgStruct.ExtId = 0x12;
                CanTxMsgStruct.IDE = 0;
                CanTxMsgStruct.RTR = 0;
                CanTxMsgStruct.StdId = 0x12;
                for(i=0;i<8;i++)
                        CanTxMsgStruct.Data[i]=Txbuf[i];
                HAL_CAN_Transmit(&CAN_HandleStruct,0);
               

                HAL_CAN_Receive(&CAN_HandleStruct,CAN_FIFO0, 1000);
                for(i=0;i<CanRxMsgStruct.DLC; i++)
                        Rxbuf[i] = CanRxMsgStruct.Data[i];               
                        if(CanRxMsgStruct.DLC)
                                {
                                for(i=0;i<=8;i++)
                                        {
                                                printf("%d\t", Rxbuf[i]);
                                        }
                                }
                HAL_Delay(1000);       
        }

}

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zhulikai 回答时间:2016-10-10 15:39:00
程序好大,20160929_Test_CAN\20160929_Test_CAN\Projects\STM32F334R8-Nucleo\Templates\MDK-ARM
zhulikai 回答时间:2016-10-10 15:39:56
zhulikai 发表于 2016-10-10 15:39
程序好大,20160929_Test_CAN\20160929_Test_CAN\Projects\STM32F334R8-Nucleo\Templates\MDK-ARM

没传上去
废鱼 回答时间:2016-10-10 15:48:12
can基本一样,如果收不到,说明配置的问题。也可以用STM32CubeMX生成测试工程。
zhulikai 回答时间:2016-10-10 19:23:05
laiyingjie 发表于 2016-10-10 19:15
关于STM32CubeMX软件配置方面,楼主可以参考这个链接内容:http://www.waveshare.net/study/article-651-1. ...

非常感谢!
zhulikai 回答时间:2016-10-10 19:24:23
安 发表于 2016-10-10 15:48
can基本一样,如果收不到,说明配置的问题。也可以用STM32CubeMX生成测试工程。 ...

谢谢您的回复
mark0668 回答时间:2016-10-10 20:37:06
CUBE 很方便的
zhangdaijin 回答时间:2016-10-11 05:43:08
zhulikai 回答时间:2016-10-11 14:39:08
zhangdaijin 回答时间:2016-10-11 15:00:45

支持一下楼主
原田夜舞love 回答时间:2016-10-11 22:53:25
帮顶了!
zhulikai 回答时间:2016-10-13 08:55:18
zhulikai 发表于 2016-10-13 08:53
利用查询模式进行CAN的环回模式已经完成,给需要的朋友参考下
int main(void)
{

大家对上述代码有何指正的不要吝啬,都提出来
zbber 回答时间:2016-10-13 09:27:33
好帖,赞一个,顶楼主

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版