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

STM32 USB HID 写入自已的数据

[复制链接]
勇气01 提问时间:2015-5-21 12:00 /



USB_SendData(data,sizeof(data)); 通过USB发送数据函数


(USB_SendData(data,sizeof(data));)是这样写的:

/**
  * @brief  通过USB发送数据
  * @param  data 数据存储首地址
  * @param  dataNum 发送的数据字节数
  * @retval 发送的字节数
  */

uint32_t USB_SendData(uint8_t *data,uint32_t dataNum)
{
        #ifndef STM32F10X_CL
        //将数据通过USB发送出去
        UserToPMABufferCopy(data, ENDP2_TXADDR, dataNum);  //拷贝数据到PMA中
        SetEPTxCount(ENDP2, REPORT_COUNT);          //从端点2发送64字节数据
        SetEPTxValid(ENDP2);          //使能端点2的发送状态
        #else
        USB_SIL_Write(EP2_IN, data, dataNum);
        #endif
        return dataNum;  
}

请问一下,我自已的数据64字节 怎么写进去。请举个例说明一下吧。本人入门初级,对语法
不是很全面,请各位高手指教。。这个程序,是可以正常使用的。我测过了。如果改好了,
我贴出来,让大家分享。                                                           

收藏 评论9 发布时间:2015-5-21 12:00

举报

9个回答
mark0668 回答时间:2015-5-21 12:07:28
你的HID 是不是描术了64字节的了,如果不是你描了多少就发多少
逍遥李 回答时间:2015-5-21 12:13:52
楼主的意思是你的数据如何通过这个函数来发送是吗?你的数据是怎么存储的呢?把数据首地址给data即可,比如一个数组table[]={,,,};
data =&table;即可
大神们我这样写对不对?我也没用过……
mark0668 回答时间:2015-5-21 12:21:11
就是传个数组的首地址指针给他,因为数组都是在连续的内存里的,所以只要知道首地址就可以读全部的数组了。去了解一下C 的指针
勇气01 回答时间:2015-5-21 12:38:20
mark0668 发表于 2015-5-21 12:21
就是传个数组的首地址指针给他,因为数组都是在连续的内存里的,所以只要知道首地址就可以读全部的数组了。 ...

能帮我虽便写个样式嘛。。你自已定义64个数据。。然后通过函数发送出去。
mark0668 回答时间:2015-5-21 12:42:59
本帖最后由 mark0668 于 2015-5-21 12:44 编辑

main(void){
u8 a[4]={0,1,2,3};
  dd(a);
}

void dd(u8 *bbb){
  u8 ee[4];
  ee[0]=bbb[0];
  ee[1]=bbb[1];
}



这是一种,
勇气01 回答时间:2015-5-21 12:48:39
mark0668 发表于 2015-5-21 12:42
main(void){
u8 a[4]={0,1,2,3};
  dd(a);

你能不能用我那个函数,虽便写几个数据调用,发送出去。。mian,直接调用的USB_SendData(data,sizeof(data));   发送。   

子函数才是这样写的
uint32_t USB_SendData(uint8_t *data,uint32_t dataNum)
{
        #ifndef STM32F10X_CL
        //将数据通过USB发送出去
        UserToPMABufferCopy(data, ENDP2_TXADDR, dataNum);  //拷贝数据到PMA中
        SetEPTxCount(ENDP2, REPORT_COUNT);          //从端点2发送64字节数据
        SetEPTxValid(ENDP2);          //使能端点2的发送状态
        #else
        USB_SIL_Write(EP2_IN, data, dataNum);
        #endif
        return dataNum;  
}
勇气01 回答时间:2015-5-21 12:58:23
mark0668 发表于 2015-5-21 12:42
main(void){
u8 a[4]={0,1,2,3};
  dd(a);

好像你是对的,,main主程序   里面定义了一个,uint8_t data[64];
然后,调用 uint32_t USB_SendData(uint8_t *data,uint32_t dataNum) 发数据
是不是应该,这样写,data[2]=22;   .......   直接把数据写入,然后调用
uint32_t USB_SendData(uint8_t *data,uint32_t dataNum)
把数据发送去。
mark0668 回答时间:2015-5-21 20:48:43
说了你去了解下C 的指针就明白了,数据传递
mark0668 回答时间:2015-5-21 20:49:34
要想深入编程就得会用指针
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版