lugl4313820 发表于 2022-4-16 07:44

【AT-START-F425测评】USB转CAN之四 完成收发测试

<p>【AT-START-F425测评】USB转CAN 预告帖 https://bbs.eeworld.com.cn/thread-1199896-1-1.html</p>

<p>【AT-START-F425测评】USB转CAN之二 https://bbs.eeworld.com.cn/thread-1199901-1-1.html</p>

<p>【AT-START-F425测评】USB转CAN之三 https://bbs.eeworld.com.cn/thread-1200055-1-1.html</p>

<p>早上起来继续搬砖,昨晚很晚把CAN收到的数据通过虚拟串口转发,今天早起来仔细看了一下CAN的发送函数,先不填充数,实现接收到串口数据标志后,先测试是否能够触发CAN数据发送:</p>

<p>CAN的发送函数 void can_transmit_data(void)。这个函数是做测试用的,只是添加了固定的数据,测试成功后,设置参与传入,实现动态数据转发。</p>

<pre>
<code>/**
*@brief can transmit data
*@paramnone
*@retval none
*/
void can_transmit_data(void)
{
uint8_t transmit_mailbox;   //这里是作为发送成的状态标志
can_tx_message_type tx_message_struct; //初始化发送结构体
tx_message_struct.standard_id = 0x400;//发送给接收者的ID
tx_message_struct.extended_id = 0;      //作为标准ID 扩展ID不设置
tx_message_struct.id_type = CAN_ID_STANDARD;//标准帧
tx_message_struct.frame_type = CAN_TFT_DATA;//数据帧
tx_message_struct.dlc = 8;                  //数据长度
tx_message_struct.data = 0x11;             //发送的数据
tx_message_struct.data = 0x22;
tx_message_struct.data = 0x33;
tx_message_struct.data = 0x44;
tx_message_struct.data = 0x55;
tx_message_struct.data = 0x66;
tx_message_struct.data = 0x77;
tx_message_struct.data = 0x88;
transmit_mailbox = can_message_transmit(CAN1, &amp;tx_message_struct);//开始发送
//等待数据发送完毕,备注:!!这里在实际工程中一定要加入超时函数,要不没有接收方返回数据,就会阻塞在这里,程序卡死!
while(can_transmit_status_get(CAN1, (can_tx_mailbox_num_type)transmit_mailbox) != CAN_TX_STATUS_SUCCESSFUL);
       
}</code></pre>

<p>然后到修改串口接收函数:</p>

<pre>
<code>void test_usb_uart(void)
{
       uint16_t data_len;

uint32_t timeout;
        uint8_t buff2[] = "mytest";
        data_len = usb_vcp_get_rxdata(&amp;otg_core_struct.dev, usb_buffer);
   if(data_len &gt; 0)
   {
                                can_transmit_data();
                        //        usb_vcp_send_data(&amp;otg_core_struct.dev, &amp;buff2, sizeof(buff2));

        }       

}</code></pre>

<p>这样程序修改结束,下载后实验现象:</p>

<p>&nbsp;这样就实验了数据相互转化测试了。基本功能已经实现。</p>

<p>【下一步想法】从串口助接受的命令定义。实现发送数据的封装。实现数据转发给CAN总线。</p>

<p>离自己的设计越来越近了,也不知道下步会有什么坑。。。大家支持一下,点点赞吧!</p>

littleshrimp 发表于 2022-4-16 08:33

<p>速度很快啊</p>

lugl4313820 发表于 2022-4-16 08:49

<p>增加发送函数:</p>

<pre>
<code>/**
*@brief CAN发送的程序
*@param8位发送数据
*@param需要发送的ID
*@param发送数的长度
*@retval none
*/
void can_transmit_data(uint8_t tran_data,uint16_t id, uint8_t len)
{
uint8_t transmit_mailbox;
can_tx_message_type tx_message_struct;
tx_message_struct.standard_id = id;
tx_message_struct.extended_id = 0;
tx_message_struct.id_type = CAN_ID_STANDARD;
tx_message_struct.frame_type = CAN_TFT_DATA;
tx_message_struct.dlc = len;
tx_message_struct.data = tran_data;
tx_message_struct.data = tran_data;
tx_message_struct.data = tran_data;
tx_message_struct.data = tran_data;
tx_message_struct.data = tran_data;
tx_message_struct.data = tran_data;
tx_message_struct.data = tran_data;
tx_message_struct.data = tran_data;
transmit_mailbox = can_message_transmit(CAN1, &amp;tx_message_struct);
while(can_transmit_status_get(CAN1, (can_tx_mailbox_num_type)transmit_mailbox) != CAN_TX_STATUS_SUCCESSFUL);       
}</code></pre>

<p>修改串口接收函数:</p>

<pre>
<code>/**
* @brief这是一个串口转CAN的函数
* @paramnone
* @retval none
*/
void test_usb_uart(void)
{
       uint16_t data_len;

uint32_t timeout;
        uint8_t can_buff2;
        data_len = usb_vcp_get_rxdata(&amp;otg_core_struct.dev, can_buff2);
   if(data_len == 8)//暂时先判断接收为8位才发送
   {
               can_transmit_data(can_buff2,0x0200,8);
        }       

}</code></pre>

<p>实验现象:</p>

<p> &nbsp;</p>

lugl4313820 发表于 2022-4-16 08:51

littleshrimp 发表于 2022-4-16 08:33
速度很快啊

<p>9点半钟回老家看父母,现在紧着时间修改。</p>

wangerxian 发表于 2022-4-17 08:06

<p>主要还有CAN接收,这个我感觉会有一些坑等待你踩<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/lol.gif" width="48" /></p>

lugl4313820 发表于 2022-4-17 09:56

wangerxian 发表于 2022-4-17 08:06
主要还有CAN接收,这个我感觉会有一些坑等待你踩

<p>接收没有问题了,昨晚发了帖子,还没给审核。</p>

影随风逝 发表于 2024-7-29 13:54

<p>up你好,请问这个有没有完整的工程源码文件分享</p>

joubert 发表于 2024-7-30 15:14

<p>学习了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</p>

HeTui 发表于 2024-11-14 21:56

<p>你好有源码吗</p>

<p>&nbsp;</p>

lugl4313820 发表于 2024-11-15 10:20

HeTui 发表于 2024-11-14 21:56
你好有源码吗

&nbsp;

<p>这么久了,不一定能找到了,代码都帖出来了,按我的文章一步一步可以做出来的,有问题时再来这里讨论吧。</p>

HeTui 发表于 2024-11-15 10:21

lugl4313820 发表于 2024-11-15 10:20
这么久了,不一定能找到了,代码都帖出来了,按我的文章一步一步可以做出来的,有问题时再来这里讨论吧。 ...

<p>想着有工程的话,会方便一点学习</p>

lugl4313820 发表于 2024-11-15 11:42

HeTui 发表于 2024-11-15 10:21
想着有工程的话,会方便一点学习

<p>官方有详细的工程例程的,你先去弄个开发板,他家的产品不错的。</p>
页: [1]
查看完整版本: 【AT-START-F425测评】USB转CAN之四 完成收发测试