RT-Thread can - STM32F103ZET6


SDK版本v4.0.2

目前,RT-Thread Studio還不能夠自定義添加can設備。下面介紹手動添加過程:

使用RT-Thread Studio創建一個簡單工程

image

使用RT-Thread env工具添加CAN設備

保存以后,rtconfig.h配置文件會隨之修改

image

拷貝sdk中can樣例到工程中

image

修改stm32f1xx_hal_conf.h文件

開啟宏定義

#define HAL_CAN_MODULE_ENABLED

添加can實現到構建

默認可以看到是取消構建的,編譯會報錯

image

image

添加GPIO初始化

gpio不初始化,can打開始終是失敗。系統會自動調用。

void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
{
    GPIO_InitTypeDef GPIO_InitStruct;
#ifdef BSP_USING_CAN1
    if(canHandle->Instance==CAN1)
    {
        /* CAN1 clock enable */
        __HAL_RCC_CAN1_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();

        /**CAN1 GPIO Configuration
           PA11     ------> CAN1_RX
           PA12     ------> CAN1_TX
         */
        GPIO_InitStruct.Pin = GPIO_PIN_11;
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

        GPIO_InitStruct.Pin = GPIO_PIN_12;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
#endif /* USING_BXCAN1 */

#ifdef BSP_USING_CAN2
    if(canHandle->Instance==CAN2)
    {
        /* CAN2 clock enable */
        __HAL_RCC_CAN2_CLK_ENABLE();
        __HAL_RCC_GPIOB_CLK_ENABLE();

        /**CAN2 GPIO Configuration
           PB12     ------> CAN2_RX
           PB6     ------> CAN2_TX
         */
        GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_6;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    }
#endif /* USING_BXCAN2 */
}

源碼地址如下:

https://github.com/zwx230741/rt_can.git


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM