標(biāo)題:
STM32f429 CAN雙機測試源碼
[打印本頁]
作者:
zynzm
時間:
2018-3-23 15:28
標(biāo)題:
STM32f429 CAN雙機測試源碼
高難度實用程序代碼
分享給小伙伴
共同進(jìn)步,不斷學(xué)習(xí),會繼續(xù)研究103系列和傳感器通信
感謝平臺
/*********************************************************************************************/
【*】程序簡介
-工程名稱:CAN—雙機通訊
-MDK版本:5.16
-ST固件庫版本:1.5.1
【 !】功能簡介:
使用CAN在兩個開發(fā)板之間通信。
學(xué)習(xí)目的:學(xué)會使用CAN通信。
【 !】注意事項:
接口:CAN-H CAN-L
跳線帽:使用跳線帽連接 C/4-5V<--->5V (出廠默認(rèn)沒有連接跳線帽,實驗前請先連接。!)。
連接 C/4-5V<--->5V后,由于CAN芯片供電,它的PB8/PB9引腳與液晶數(shù)據(jù)引腳共用,
會干擾液晶屏,液晶屏顏色會畸變。
CAN波特率1MHz, 報文使用擴展ID,報文濾波,只接收0x1314 EXID的報文。
【 !】實驗操作:
若使用兩個秉火開發(fā)板進(jìn)行實驗,使用線連接兩個板子的CAN-H,CAN-L(H與H相連,L與L相連)。
然后兩個開發(fā)板都下載本程序。
電腦端使用串口調(diào)試助手,選擇電腦與STM32相連的COM口,設(shè)置為115200-N-8-1,
復(fù)位開發(fā)板,即可接收STM32串口發(fā)送給電腦的調(diào)試信息。
準(zhǔn)備好后,按下其中一個開發(fā)板的KEY1鍵,會使用CAN向外發(fā)送0-255的數(shù)字。
若開發(fā)板的CAN接收到256個字節(jié)數(shù)據(jù),會把數(shù)據(jù)以16進(jìn)制形式打印出來。
/*********************************************************************************************/
【*】 引腳分配
CAN芯片
CAN芯片的電源引腳與排針相連,通過跳線帽STM32的串口相連。(出廠默認(rèn)沒有連接跳線帽)
5V <--->C/4-5V (可通過跳線帽連接到5v)
RXD <--->PB8
TXD <--->PB9
串口(TTL-USB TO USART):
CH340的收發(fā)引腳與STM32的發(fā)收引腳相連。
RX<--->PA9
TX<--->PA10
/*********************************************************************************************/
【*】 時鐘
A.晶振:
-外部高速晶振:25MHz
-RTC晶振:32.768KHz
B.各總線運行時鐘:
-系統(tǒng)時鐘 = SYCCLK = AHB1 = 180MHz
-APB2 = 90MHz
-APB1 = 45MHz
C.浮點運算單元:
不使用
STM32f429單片機源程序如下:
/**
******************************************************************************
* @file main.c
* @author fire
* @version V1.0
* @brief CAN通訊實驗
******************************************************************************
* @attention
******************************************************************************
*/
#include "stm32f4xx.h"
#include "./led/bsp_led.h"
#include "./usart/bsp_debug_usart.h"
#include "./can/bsp_can.h"
#include "./key/bsp_key.h"
__IO uint32_t flag = 0; //用于標(biāo)志是否接收到數(shù)據(jù),在中斷函數(shù)中賦值
CanTxMsg TxMessage; //發(fā)送緩沖區(qū)
CanRxMsg RxMessage; //接收緩沖區(qū)
/// 不精確的延時
static void can_delay(__IO u32 nCount)
{
for(; nCount != 0; nCount--);
}
/**
* @brief 主函數(shù)
* @param 無
* @retval 無
*/
int main(void)
{
LED_GPIO_Config();
/*初始化USART1*/
Debug_USART_Config();
/*初始化按鍵*/
Key_GPIO_Config();
/*初始化can,在中斷接收CAN數(shù)據(jù)包*/
CAN_Config();
printf("\r\n 歡迎使用秉火 STM32 F429 開發(fā)板。\r\n");
printf("\r\n 秉火F429 CAN通訊實驗例程\r\n");
printf("\r\n 實驗步驟:\r\n");
printf("\r\n 1.使用導(dǎo)線連接好兩個CAN訊設(shè)備\r\n");
printf("\r\n 2.使用跳線帽連接好:5v --- C/4-5V \r\n");
printf("\r\n 3.按下開發(fā)板的KEY1鍵,會使用CAN向外發(fā)送0-7的數(shù)據(jù)包,包的擴展ID為0x1314 \r\n");
printf("\r\n 4.若開發(fā)板的CAN接收到擴展ID為0x1314的數(shù)據(jù)包,會把數(shù)據(jù)以打印到串口。 \r\n");
printf("\r\n 5.本例中的can波特率為1MBps,為stm32的can最高速率。 \r\n");
while(1)
{
/*按一次按鍵發(fā)送一次數(shù)據(jù)*/
if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON)
{
LED_BLUE;
CAN_SetMsg(&TxMessage);
CAN_Transmit(CANx, &TxMessage);
can_delay(10000);//等待發(fā)送完畢,可使用CAN_TransmitStatus查看狀態(tài)
LED_GREEN;
printf("\r\n已使用CAN發(fā)送數(shù)據(jù)包!\r\n");
printf("\r\n發(fā)送的報文內(nèi)容為:\r\n");
printf("\r\n 擴展ID號ExtId:0x%x \r\n",TxMessage.ExtId);
CAN_DEBUG_ARRAY(TxMessage.Data,8);
}
if(flag==1)
{
LED_GREEN;
printf("\r\nCAN接收到數(shù)據(jù):\r\n");
CAN_DEBUG_ARRAY(RxMessage.Data,8);
flag=0;
}
}
}
/*********************************************END OF FILE**********************/
復(fù)制代碼
所有資料51hei提供下載:
CAN—雙機通訊.zip
(559.47 KB, 下載次數(shù): 88)
2018-3-23 15:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
yehchanghung
時間:
2018-11-21 11:08
請問這是適用STM32F429ZI-DISC1的開發(fā)板用嗎?
作者:
yehchanghung
時間:
2018-11-21 11:10
請問這程式適用STM32F429ZI-DISC1開發(fā)板嗎?
作者:
abcyudqqa1
時間:
2018-12-3 15:06
正需要STM32F429 CAN總線設(shè)置例程,文件里不知道有沒有包含CAN初始化,先頂個貼
作者:
abcyudqqa1
時間:
2018-12-3 15:07
正需要STM32F429 CAN總線初始化例程,不知道資料里面有沒有,先頂個帖
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1