首頁 > 評測 > 【AutoChips 7801x MCU評測報告】+CAN測試
【AutoChips 7801x MCU評測報告】+CAN測試
- [導(dǎo)讀]
- 本帖最后由 full_stack 于 2020-7-10 22:36 編輯 AC7801x 開發(fā)板,MCU型號為 AC78013FDLA,LQFP48 收到開發(fā)板就準(zhǔn)備測試, 開發(fā)環(huán)境: Keil MDK Version 5 AutoChips.AC780x_DFP.1.0.1.pack 硬件方面要
本帖最后由 full_stack 于 2020-7-10 22:36 編輯
AC7801x 開發(fā)板,MCU型號為 AC78013FDLA,LQFP48
收到開發(fā)板就準(zhǔn)備測試,
開發(fā)環(huán)境:
Keil MDK Version 5
AutoChips.AC780x_DFP.1.0.1.pack
硬件方面要有:
12V/5V 電源
下載仿真器
電源接口我找了下,沒找到跟板子對應(yīng)的,
下載器J-Link使用20針牛角座連上不能識別出設(shè)備。
擱置了幾天,當(dāng)時也比較忙,
昨天又拿出來,
電源用了12V的開關(guān)電源,焊了兩根線到背面,
下載器用了DAP飛線到板子上,總算能下載運行了,
打開Keil MDK Version 5,打開Pack Installer,如圖
可以看到AC78013FDLA提供的例程是如此之多,
隨便選幾個例程復(fù)制到本地測試,我選擇CAN和GPIO的例程,因為考慮到會用這款芯片CAN設(shè)備的開發(fā)。
- while (1)
- {
- /* Get KEY6 state and Set LED2 state */
- if ((s_key6State == GPIO_KEY_RELEASE) && (GPIO_GET_KEY6() == GPIO_KEY_PRESS)) /* Is KEY6 had been pressed */
- {
- mdelay(10);
- if (GPIO_GET_KEY6() == GPIO_KEY_PRESS)
- {
- s_led2Enable = !s_led2Enable;
- GPIO_SET_LED2(s_led2Enable); /* toggle LED2 output */
- if (s_key6State == GPIO_KEY_RELEASE)
- {
- s_key6State = GPIO_KEY_PRESS;
- printf("KEY6 press!\r\n");
- }
- recvFrameCount += CAN_InterruptRecvSendTest(CANx, type);
- }
- }
- else if ((s_key6State == GPIO_KEY_PRESS) && (GPIO_GET_KEY6() == GPIO_KEY_RELEASE)) /* Is KEY6 had been released */
- {
- s_key6State = GPIO_KEY_RELEASE;
- printf("KEY6 release!\r\n");
- }
- else
- {
- }
- /* Get KEY7 state and Set LED3 state */
- if ((s_key7State == GPIO_KEY_RELEASE) && (GPIO_GET_KEY7() == GPIO_KEY_PRESS)) /* Is KEY7 had been pressed */
- {
- mdelay(10);
- if (GPIO_GET_KEY7() == GPIO_KEY_PRESS)
- {
- s_key7State = GPIO_KEY_PRESS;
- s_led3Enable = !s_led3Enable;
- GPIO_SET_LED3(s_led3Enable); /* toggle LED3 output */
- printf("KEY7 press!\r\n");
- }
- }
- else if ((s_key7State == GPIO_KEY_PRESS) && (GPIO_GET_KEY7() == GPIO_KEY_RELEASE)) /* Is KEY6 had been released */
- {
- s_key7State = GPIO_KEY_RELEASE;
- printf("KEY7 release!\r\n");
- }
- else
- {
- }
- }
例程選擇的CAN_DEMO,主函數(shù)用的的GPIO例程,按鍵KEY6控制LED2燈的時候發(fā)送一幀CAN,
CAN_DEMO中由于本來是設(shè)置了一段發(fā)送邏輯,由主程序500ms發(fā)送一次,所以會出現(xiàn)遠(yuǎn)程幀仍有數(shù)據(jù)長度的識別,
- int32_t CAN_InterruptRecvSendTest(CAN_Type *CANx, CAN_TransmitBufferType type)
- {
- static CAN_MsgInfoType s_sendMsg = {0};
- static uint8_t sendData[8] = {0};
- int32_t recv = 0;
- uint8_t instance = 0;
- instance = CAN_INDEX(CANx);
- if (s_recvMsgPool[instance].recvCount > 0)
- {
- while (s_recvMsgPool[instance].recvCount > 0)
- {
- recv++;
- HandlePoolCanMsg(CANx);
- }
- }
- if (!CAN_IsTransmitBusy(CANx, type))
- {
- s_sendMsg.ID++;
- s_sendMsg.IDE = rand() % 2;
- s_sendMsg.RTR = rand() % 2;
- s_sendMsg.DLC = rand() % 9;
- *(uint32_t *)sendData += 0xf;
- *((uint32_t *)sendData + 1) += 0xf;
- s_sendMsg.DATA = sendData;
- if (0 == CAN_TransmitMessage(CANx, &s_sendMsg, type))
- {
- g_sendCount[instance]++;
- }
- }
- return recv;
- }
不知是接收器檢測到RTR位為遠(yuǎn)程幀,后面的數(shù)據(jù)部分不接收,還是遠(yuǎn)程幀沒有發(fā)送8字節(jié)數(shù)據(jù)。
照我的理解,
如果發(fā)送遠(yuǎn)程幀,那么表示數(shù)據(jù)長度的寄存器DLC應(yīng)該是0,并且不應(yīng)該有8字節(jié)的數(shù)據(jù)發(fā)送
如果發(fā)送數(shù)據(jù)幀,不足八字節(jié),那么DLC是幾就應(yīng)該發(fā)送幾個字節(jié),
不應(yīng)該一直發(fā)8字節(jié),由接收器去自己抉擇。
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達(dá)中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標(biāo)準(zhǔn)編制 2024-08-29
- NRF52810藍(lán)牙數(shù)字耳機找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設(shè)計
預(yù)算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時前
- PLC項目調(diào)試修改
預(yù)算:¥100001天前
- 起動電機控制器開發(fā)
預(yù)算:¥1100001天前