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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版