您好,您最近有没有研究用Cube配置以太网通信呢

问题困惑lx09110718 回复了问题 • 2 人关注 • 3 个回复 • 1703 次浏览 • 2014-12-31 10:19 • 来自相关话题

滴答时钟计时修改systick记录

回复

经验分享admin 回复了问题 • 1 人关注 • 1 个回复 • 2599 次浏览 • 2014-12-31 10:07 • 来自相关话题

转载一篇usb_hid的文章,来自捷克的一个电子论坛,用google翻译的,耐心看吧

经验分享admin 发表了文章 • 0 个评论 • 5659 次浏览 • 2014-12-30 09:52 • 来自相关话题

国外的电子论坛的作品,捷克语,翻译来的...
今天的作品的内容是USB HID。 HID我们已经讨论过,它是USB设备的类别之一。的优点是,HID是Windows的一个通用的组成部分,因此,就不需要驱动器和连接到PC的装置。这就是为什么我喜欢的虚拟USB串口选择HID实施的第二个实际的例子。
介绍

HID,因为我们讨论了我的各种装备。你可以让鼠标套件,这将是在屏幕上平移光标(如演示套件为例)或键盘,它允许你打开文件直接写入测量值。然而,在实践中,往往你可能会使用HID称,自定义页面,因此,它不会是一个“正常的装置”,但他们没有把它定义将如何表现,让PC控制,并从设备接收数据为您服务。

HID具有除的优势,一些缺点。缺点是由于这类USB设备的定义。 HID主要用于与人沟通 - 这是非常缓慢的外设相比,今天的计算机。所以HID设备只发送少量数据和缓慢的。然而,对于我们的许多应用中可能是足够的。我注意到在事先有人试图实现使用HID类,例如,逻辑分析仪或示波器,然后是惊讶,收集的数据不能传送到PC上。相反地,HID是适合于需要测量温度,电压,或从时间到时间的设备,以要求其它的当前值,或甚至USB字符显示到不时发送一些值。应用程序通过ST“USB HID演示”很好地展示了与HID沟通的可能性。在PC上运行的USB HID演示应用程序,点击图标点亮LED也对套件,反之亦然,当你按下工具包,让你出现在屏幕上相应的变化。它也发送来自AD转换器的一个值。所以数据并不多,但是当你编写自己的程序在PC上,这样你就不必想知道一些特殊的USB驱动程序,当编写应用程序的PC将使用一个简单的通用库,你přilinkujete他们的计划。但它会发现,在未来的一部分。在这一部分中,您将验证使用的是USB HID演示的功能。


实现

正如上面写的,我用这个软件的ST(USB HID演示),但它必须设置。第一USB HID演示下载(链接在最后),并安装它。第一次运行之后(你翻译这个演示工具包和连接第二USB电缆连接到PC之前)设置如下:





巴赫到VariableInput1他是06!在VariableOutput实现我走了,但你当然可以使用D/ A转换器产生一个相应的电压。无论如何,你可以尝试一下功课,谁可以先做到这一点,所以获得STM32F的一个样本。

设置完成后,您可以切换到正常的图形模式,然后你可以转换演示。仍有一些bug(有些嗡嗡声使整数赋给指针,未作类型转换等,但你也知道,基切食者warnigy不这样做,因此,有些跟你说实话可以对其进行编辑),但更主要的是,它的作品。我希望如此。因为我还没有尝试过这种测量A / D转换器引脚PA1,但我希望它的工作原理(并要求确认在评论中,如果有人测试过)。

至于其他MCU的实施和自然再利用STM32F4探索套件,它通过两个USB线与PC连接,如部分描述了USB虚拟串口。即使这个演示应用程序是用Atollic TrueSTUDIO这样你就可以将它解压缩,并将其导入您的环境。我们试图编写应用程序,因此您可以在IAR和Keil使用它,但因为没有这些环境不目前在PC,所以我没有检查导入功能。

翻译应用程序启动调试TrueSTUDIO,它被装载到MCU固件后,您F8,这是你运行了该程序的简历。在PC应该跳的连接到新的硬件(HID)和枚举后的图标,你会看到“控制面板 - 系统 - 硬件 - 设备管理器”中,你开始一个新的USB设备列表的末尾。这只是验证USB HID正确介绍。然后您可以点击USB HID演示和挤压USER按钮(蓝色),以STM32F4探索套件,它应该工作。我的意思是,当你按下USER按钮,表格USB HID演示看看它是如何变成绿色圆圈,左,反之亦然,通过PC屏幕上的表单弹将点亮LED的套件。在屏幕上,它看起来像下图。





在SW细节

我出来的时候自然地从现有的演示,STM32F4探索,它实现了HID鼠标。然而,鼠标只发送数据,并且不接受任何东西,所以我不得不注册谱写新的功能USBD_HID_DataOut。注册我进行如下:


USBD_Class_cb_TypeDef USBD_HID_cb =
{
USBD_HID_Init,
USBD_HID_DeInit,
USBD_HID_Setup,
NULL, /[i]EP0_TxSent[/i]/
NULL, /[i]EP0_RxReady[/i]/
USBD_HID_DataIn, /[i]DataIn[/i]/
/[i] NULL,[/i]/
USBD_HID_DataOut, /[i]DataOut[/i]/
NULL, /[i]SOF [/i]/
NULL,
NULL,
USBD_HID_GetCfgDesc,
#ifdef USB_OTG_HS_CORE
USBD_HID_GetCfgDesc, /[i] use same config as per FS [/i]/
#endif
};

函数如下:


/**
* @brief USBD_HID_DataOut
* handle data OUT Stage
* @param pdev: device instance
* @param epnum: endpoint index
* @retval status
*/
static uint8_t USBD_HID_DataOut (void *pdev, uint8_t epnum)
{
uint16_t USB_RecData_Cnt;
BitAction Led_State;
if (epnum == HID_OUT_EP)
{
/[i] Get the received data buffer and update the counter [/i]/
USB_RecData_Cnt = ((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].xfer_count;
/* USB data will be immediately processed, this allow next USB traffic being
NAKed till the end of the application Xfer */
if (((USB_OTG_CORE_HANDLE*)pdev)->dev.device_status == USB_OTG_CONFIGURED )
{
/[i] predpokladame ze delka = 2 bajty [/i]/
USB_OTG_ReadPacket((USB_OTG_CORE_HANDLE[i])pdev, [/i]Buffer, HID_OUT_PACKET);
/[i] process the report setting [/i]/
if (Buffer[1] == 0)
Led_State = Bit_RESET;
else
Led_State = Bit_SET;
switch (Buffer[0])
{
case 1: /[i] Led 1 [/i]/
if (Led_State != Bit_RESET)
STM32F4_Discovery_LEDOn(LED3);
else
STM32F4_Discovery_LEDOff(LED3);
break;
case 2: /[i] Led 2 [/i]/
if (Led_State != Bit_RESET)
STM32F4_Discovery_LEDOn(LED4);
else
STM32F4_Discovery_LEDOff(LED4);
break;
case 3: /[i] Led 3 [/i]/
if (Led_State != Bit_RESET)
STM32F4_Discovery_LEDOn(LED5);
else
STM32F4_Discovery_LEDOff(LED5);
break;
case 4: /[i] Led 4 [/i]/
if (Led_State != Bit_RESET)
STM32F4_Discovery_LEDOn(LED6);
else
STM32F4_Discovery_LEDOff(LED6);
break;
default:
STM32F4_Discovery_LEDOff(LED3); /[i] oranzova [/i]/
STM32F4_Discovery_LEDOff(LED4); /[i] zelena [/i]/
STM32F4_Discovery_LEDOff(LED5); /[i] cervena [/i]/
STM32F4_Discovery_LEDOff(LED6); /[i] modra [/i]/
break;
}
/[i] Prepare Out endpoint to receive next packet [/i]/
DCD_EP_PrepareRx(pdev,
HID_OUT_EP,
(uint8_t*)(Buffer),
HID_OUT_PACKET);
}
}
return USBD_OK;
}

你怎么看你自己的代码,因此函数从PC直接处理收到的报告,并没有设置按试剂盒的LED。但是,这是问题的一个方面,即在数据的方向从PC向USB设备。但你也想从一个工具包,以PC发送数据(没有多少那里,只有用户按下按钮,但我们无论如何写)。观察整个事情在main()。


/**
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{
STM32F4_Discovery_LEDInit(LED3);
STM32F4_Discovery_LEDInit(LED4);
STM32F4_Discovery_LEDInit(LED5);
STM32F4_Discovery_LEDInit(LED6);
STM32F4_Discovery_PBInit(BUTTON_USER, BUTTON_MODE_GPIO);

/[i] zapneme LED3 [/i]/
STM32F4_Discovery_LEDOn(LED3); /[i] oranzova [/i]/
Delay(0xFFFF);
STM32F4_Discovery_LEDOff(LED3); /[i] oranzova [/i]/

USBD_Init(&USB_OTG_dev,
#ifdef USE_USB_OTG_HS
USB_OTG_HS_CORE_ID,
#else
USB_OTG_FS_CORE_ID,
#endif
&USR_desc,
&USBD_HID_cb,
&USR_cb);

Init_ADC_Reading();
while (1)
{
if (STM32F4_Discovery_PBGetState(BUTTON_USER) == Bit_SET)
{
/[i] STM32F4_Discovery_LEDOn(LED3); oranzova - debug only [/i]/
if (UserButtonPressed != 0x01)
{
/[i] new action [/i]/
UserButtonPressed = 0x01;
Delay(0xFF);
Buffer[0]=0x05; /[i] report cislo 5 [/i]/
Buffer[1]=0x01;
USBD_HID_SendReport (&USB_OTG_dev, Buffer, 2);
}
}
else
{
/[i] STM32F4_Discovery_LEDOff(LED3); oranzova - debug only[/i]/
if (UserButtonPressed != 0x00)
{
/[i] new action [/i]/
UserButtonPressed = 0x00;
Delay(0xFF);
Buffer[0]=0x05; /[i] report cislo 5 [/i]/
Buffer[1]=0x00;
USBD_HID_SendReport (&USB_OTG_dev, Buffer, 2);
}
}
}
}

操作通信,也不得不写,而不是原来的一个新的报告描述符。新如下所示。


__ALIGN_BEGIN static uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] __ALIGN_END =
{
0x06, 0xFF, 0x00, /[i] USAGE_PAGE (Vendor Page: 0xFF00) [/i]/
0x09, 0x01, /[i] USAGE (Demo Kit) [/i]/
0xA1, 0x01, /[i] COLLECTION (Application) [/i]/
/[i] 6 [/i]/
/[i] Led 1 [/i]/
0x85, 0x01, /[i] REPORT_ID (1) [/i]/
0x09, 0x01, /[i] USAGE (LED 1) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x95, 0x01, /[i] REPORT_COUNT (1) [/i]/
0xB1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x85, 0x01, /[i] REPORT_ID (1) [/i]/
0x09, 0x01, /[i] USAGE (LED 1) [/i]/
0x91, 0x82, /[i] OUTPUT (Data,Var,Abs,Vol) [/i]/
/[i] 26 [/i]/
/[i] Led 2 [/i]/
0x85, 0x02, /[i] REPORT_ID 2 [/i]/
0x09, 0x02, /[i] USAGE (LED 2) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x95, 0x01, /[i] REPORT_COUNT (1) [/i]/
0xB1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x85, 0x02, /[i] REPORT_ID (2) [/i]/
0x09, 0x02, /[i] USAGE (LED 2) [/i]/
0x91, 0x82, /[i] OUTPUT (Data,Var,Abs,Vol) [/i]/
/[i] 46 [/i]/
/[i] Led 3 [/i]/
0x85, 0x03, /[i] REPORT_ID (3) [/i]/
0x09, 0x03, /[i] USAGE (LED 3) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x95, 0x01, /[i] REPORT_COUNT (1) [/i]/
0xB1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x85, 0x03, /[i] REPORT_ID (3) [/i]/
0x09, 0x03, /[i] USAGE (LED 3) [/i]/
0x91, 0x82, /[i] OUTPUT (Data,Var,Abs,Vol) [/i]/
/[i] 66 [/i]/
/[i] Led 4 [/i]/
0x85, 0x04, /[i] REPORT_ID 4) [/i]/
0x09, 0x04, /[i] USAGE (LED 4) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x95, 0x01, /[i] REPORT_COUNT (1) [/i]/
0xB1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x85, 0x04, /[i] REPORT_ID (4) [/i]/
0x09, 0x04, /[i] USAGE (LED 4) [/i]/
0x91, 0x82, /[i] OUTPUT (Data,Var,Abs,Vol) [/i]/
/[i] 86 [/i]/
/[i] key USER Button [/i]/
0x85, 0x05, /[i] REPORT_ID (5) [/i]/
0x09, 0x05, /[i] USAGE (USER Button) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x01, /[i] REPORT_SIZE (1) [/i]/
0x81, 0x82, /[i] INPUT (Data,Var,Abs,Vol) [/i]/
0x09, 0x05, /[i] USAGE (USER Button) [/i]/
0x75, 0x01, /[i] REPORT_SIZE (1) [/i]/
0xb1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x75, 0x07, /[i] REPORT_SIZE (7) [/i]/
0x81, 0x83, /[i] INPUT (Cnst,Var,Abs,Vol) [/i]/
0x85, 0x05, /[i] REPORT_ID (5) [/i]/
0x75, 0x07, /[i] REPORT_SIZE (7) [/i]/
0xb1, 0x83, /[i] FEATURE (Cnst,Var,Abs,Vol) [/i]/
/[i] 114 [/i]/
/[i] ADC IN [/i]/
0x85, 0x06, /[i] REPORT_ID (6) [/i]/
0x09, 0x07, /[i] USAGE (ADC IN) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x26, 0xff, 0x00, /[i] LOGICAL_MAXIMUM (255) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x81, 0x82, /[i] INPUT (Data,Var,Abs,Vol) [/i]/
0x85, 0x06, /[i] REPORT_ID (6) [/i]/
0x09, 0x06, /[i] USAGE (ADC in) [/i]/
0xb1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
/[i] 133 [/i]/
0xc0 /[i] END_COLLECTION [/i]/
}; /[i] CustomHID_ReportDescriptor [/i]/

正如你可以从报告的描述看,所以要控制每一个元素,都必须在报告中恰当的描述。当然还有另一种解决方案 - 编写需要一个30字节的数据包的长度只有一个报告,内容你自己定义一个通用的元素。但是,如果我想使用USB HID演示,所以我不得不坚持要求该报告,在上述声明中表示标准。

结论

我有这个计划,努力不够。而唯一的原因是我的狗屎当我忽视的是,在定义中描述的设备我有一个不正确长度的描述,当然,这导致了他的中间枚举下降。哦耶。好吧,我终于,两天后,他擦额头出汗出现。所以我希望至少有一小的奖励将是我希望这是USB的第一实施HID自定义页面STM32F4探索套件的世界。

接下来的时间,我们将展示如何使用Visual Studio的C#写的东西,如USB HID演示从ST。

如果你认为你的文字和连接演示程序值得你欣赏,你可以提交你的资助。谢谢你提前给大家!你会支持其他文章的出现。
参考

材料HID这里找到。
USB HID演示你下载的ST网站在这里。

这项工作的压缩项目都可以在这里找到。

入门STM32F4套件第一个链接(开发环境等)
入门STM32F4第二连接套件(USB首页)
入门STM32F4第三连接套件(USB枚举)
入门STM32F4套件第四连接(USB虚拟COM口)
Modifikce USB HID的STM32F103链接
入门STM32F4套件第五连杆(端口名称,选择功能)
与STM32F4套件第六连杆(VGA显示器)入门

补充

尽管如此,我忘了写了A / D转换器,一个试剂盒PC的价值将中断触发时,ADC转换完成的文本。因此,它可以在处理程序的中断中找到。

本文转自:http://mcu.cz/comment-n2848.html

本文配套的图示软件,在本站百度网盘中可以找到 !请自行下载 ! 查看全部
国外的电子论坛的作品,捷克语,翻译来的...
今天的作品的内容是USB HID。 HID我们已经讨论过,它是USB设备的类别之一。的优点是,HID是Windows的一个通用的组成部分,因此,就不需要驱动器和连接到PC的装置。这就是为什么我喜欢的虚拟USB串口选择HID实施的第二个实际的例子。
介绍

HID,因为我们讨论了我的各种装备。你可以让鼠标套件,这将是在屏幕上平移光标(如演示套件为例)或键盘,它允许你打开文件直接写入测量值。然而,在实践中,往往你可能会使用HID称,自定义页面,因此,它不会是一个“正常的装置”,但他们没有把它定义将如何表现,让PC控制,并从设备接收数据为您服务。

HID具有除的优势,一些缺点。缺点是由于这类USB设备的定义。 HID主要用于与人沟通 - 这是非常缓慢的外设相比,今天的计算机。所以HID设备只发送少量数据和缓慢的。然而,对于我们的许多应用中可能是足够的。我注意到在事先有人试图实现使用HID类,例如,逻辑分析仪或示波器,然后是惊讶,收集的数据不能传送到PC上。相反地,HID是适合于需要测量温度,电压,或从时间到时间的设备,以要求其它的当前值,或甚至USB字符显示到不时发送一些值。应用程序通过ST“USB HID演示”很好地展示了与HID沟通的可能性。在PC上运行的USB HID演示应用程序,点击图标点亮LED也对套件,反之亦然,当你按下工具包,让你出现在屏幕上相应的变化。它也发送来自AD转换器的一个值。所以数据并不多,但是当你编写自己的程序在PC上,这样你就不必想知道一些特殊的USB驱动程序,当编写应用程序的PC将使用一个简单的通用库,你přilinkujete他们的计划。但它会发现,在未来的一部分。在这一部分中,您将验证使用的是USB HID演示的功能。


实现

正如上面写的,我用这个软件的ST(USB HID演示),但它必须设置。第一USB HID演示下载(链接在最后),并安装它。第一次运行之后(你翻译这个演示工具包和连接第二USB电缆连接到PC之前)设置如下:

hiddemonstrator.png

巴赫到VariableInput1他是06!在VariableOutput实现我走了,但你当然可以使用D/ A转换器产生一个相应的电压。无论如何,你可以尝试一下功课,谁可以先做到这一点,所以获得STM32F的一个样本。

设置完成后,您可以切换到正常的图形模式,然后你可以转换演示。仍有一些bug(有些嗡嗡声使整数赋给指针,未作类型转换等,但你也知道,基切食者warnigy不这样做,因此,有些跟你说实话可以对其进行编辑),但更主要的是,它的作品。我希望如此。因为我还没有尝试过这种测量A / D转换器引脚PA1,但我希望它的工作原理(并要求确认在评论中,如果有人测试过)。

至于其他MCU的实施和自然再利用STM32F4探索套件,它通过两个USB线与PC连接,如部分描述了USB虚拟串口。即使这个演示应用程序是用Atollic TrueSTUDIO这样你就可以将它解压缩,并将其导入您的环境。我们试图编写应用程序,因此您可以在IAR和Keil使用它,但因为没有这些环境不目前在PC,所以我没有检查导入功能。

翻译应用程序启动调试TrueSTUDIO,它被装载到MCU固件后,您F8,这是你运行了该程序的简历。在PC应该跳的连接到新的硬件(HID)和枚举后的图标,你会看到“控制面板 - 系统 - 硬件 - 设备管理器”中,你开始一个新的USB设备列表的末尾。这只是验证USB HID正确介绍。然后您可以点击USB HID演示和挤压USER按钮(蓝色),以STM32F4探索套件,它应该工作。我的意思是,当你按下USER按钮,表格USB HID演示看看它是如何变成绿色圆圈,左,反之亦然,通过PC屏幕上的表单弹将点亮LED的套件。在屏幕上,它看起来像下图。

hiddemonstrator2.png

在SW细节

我出来的时候自然地从现有的演示,STM32F4探索,它实现了HID鼠标。然而,鼠标只发送数据,并且不接受任何东西,所以我不得不注册谱写新的功能USBD_HID_DataOut。注册我进行如下:


USBD_Class_cb_TypeDef USBD_HID_cb =
{
USBD_HID_Init,
USBD_HID_DeInit,
USBD_HID_Setup,
NULL, /[i]EP0_TxSent[/i]/
NULL, /[i]EP0_RxReady[/i]/
USBD_HID_DataIn, /[i]DataIn[/i]/
/[i] NULL,[/i]/
USBD_HID_DataOut, /[i]DataOut[/i]/
NULL, /[i]SOF [/i]/
NULL,
NULL,
USBD_HID_GetCfgDesc,
#ifdef USB_OTG_HS_CORE
USBD_HID_GetCfgDesc, /[i] use same config as per FS [/i]/
#endif
};

函数如下:


/**
* @brief USBD_HID_DataOut
* handle data OUT Stage
* @param pdev: device instance
* @param epnum: endpoint index
* @retval status
*/
static uint8_t USBD_HID_DataOut (void *pdev, uint8_t epnum)
{
uint16_t USB_RecData_Cnt;
BitAction Led_State;
if (epnum == HID_OUT_EP)
{
/[i] Get the received data buffer and update the counter [/i]/
USB_RecData_Cnt = ((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].xfer_count;
/* USB data will be immediately processed, this allow next USB traffic being
NAKed till the end of the application Xfer */
if (((USB_OTG_CORE_HANDLE*)pdev)->dev.device_status == USB_OTG_CONFIGURED )
{
/[i] predpokladame ze delka = 2 bajty [/i]/
USB_OTG_ReadPacket((USB_OTG_CORE_HANDLE[i])pdev, [/i]Buffer, HID_OUT_PACKET);
/[i] process the report setting [/i]/
if (Buffer[1] == 0)
Led_State = Bit_RESET;
else
Led_State = Bit_SET;
switch (Buffer[0])
{
case 1: /[i] Led 1 [/i]/
if (Led_State != Bit_RESET)
STM32F4_Discovery_LEDOn(LED3);
else
STM32F4_Discovery_LEDOff(LED3);
break;
case 2: /[i] Led 2 [/i]/
if (Led_State != Bit_RESET)
STM32F4_Discovery_LEDOn(LED4);
else
STM32F4_Discovery_LEDOff(LED4);
break;
case 3: /[i] Led 3 [/i]/
if (Led_State != Bit_RESET)
STM32F4_Discovery_LEDOn(LED5);
else
STM32F4_Discovery_LEDOff(LED5);
break;
case 4: /[i] Led 4 [/i]/
if (Led_State != Bit_RESET)
STM32F4_Discovery_LEDOn(LED6);
else
STM32F4_Discovery_LEDOff(LED6);
break;
default:
STM32F4_Discovery_LEDOff(LED3); /[i] oranzova [/i]/
STM32F4_Discovery_LEDOff(LED4); /[i] zelena [/i]/
STM32F4_Discovery_LEDOff(LED5); /[i] cervena [/i]/
STM32F4_Discovery_LEDOff(LED6); /[i] modra [/i]/
break;
}
/[i] Prepare Out endpoint to receive next packet [/i]/
DCD_EP_PrepareRx(pdev,
HID_OUT_EP,
(uint8_t*)(Buffer),
HID_OUT_PACKET);
}
}
return USBD_OK;
}

你怎么看你自己的代码,因此函数从PC直接处理收到的报告,并没有设置按试剂盒的LED。但是,这是问题的一个方面,即在数据的方向从PC向USB设备。但你也想从一个工具包,以PC发送数据(没有多少那里,只有用户按下按钮,但我们无论如何写)。观察整个事情在main()。


/**
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{
STM32F4_Discovery_LEDInit(LED3);
STM32F4_Discovery_LEDInit(LED4);
STM32F4_Discovery_LEDInit(LED5);
STM32F4_Discovery_LEDInit(LED6);
STM32F4_Discovery_PBInit(BUTTON_USER, BUTTON_MODE_GPIO);

/[i] zapneme LED3 [/i]/
STM32F4_Discovery_LEDOn(LED3); /[i] oranzova [/i]/
Delay(0xFFFF);
STM32F4_Discovery_LEDOff(LED3); /[i] oranzova [/i]/

USBD_Init(&USB_OTG_dev,
#ifdef USE_USB_OTG_HS
USB_OTG_HS_CORE_ID,
#else
USB_OTG_FS_CORE_ID,
#endif
&USR_desc,
&USBD_HID_cb,
&USR_cb);

Init_ADC_Reading();
while (1)
{
if (STM32F4_Discovery_PBGetState(BUTTON_USER) == Bit_SET)
{
/[i] STM32F4_Discovery_LEDOn(LED3); oranzova - debug only [/i]/
if (UserButtonPressed != 0x01)
{
/[i] new action [/i]/
UserButtonPressed = 0x01;
Delay(0xFF);
Buffer[0]=0x05; /[i] report cislo 5 [/i]/
Buffer[1]=0x01;
USBD_HID_SendReport (&USB_OTG_dev, Buffer, 2);
}
}
else
{
/[i] STM32F4_Discovery_LEDOff(LED3); oranzova - debug only[/i]/
if (UserButtonPressed != 0x00)
{
/[i] new action [/i]/
UserButtonPressed = 0x00;
Delay(0xFF);
Buffer[0]=0x05; /[i] report cislo 5 [/i]/
Buffer[1]=0x00;
USBD_HID_SendReport (&USB_OTG_dev, Buffer, 2);
}
}
}
}

操作通信,也不得不写,而不是原来的一个新的报告描述符。新如下所示。


__ALIGN_BEGIN static uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] __ALIGN_END =
{
0x06, 0xFF, 0x00, /[i] USAGE_PAGE (Vendor Page: 0xFF00) [/i]/
0x09, 0x01, /[i] USAGE (Demo Kit) [/i]/
0xA1, 0x01, /[i] COLLECTION (Application) [/i]/
/[i] 6 [/i]/
/[i] Led 1 [/i]/
0x85, 0x01, /[i] REPORT_ID (1) [/i]/
0x09, 0x01, /[i] USAGE (LED 1) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x95, 0x01, /[i] REPORT_COUNT (1) [/i]/
0xB1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x85, 0x01, /[i] REPORT_ID (1) [/i]/
0x09, 0x01, /[i] USAGE (LED 1) [/i]/
0x91, 0x82, /[i] OUTPUT (Data,Var,Abs,Vol) [/i]/
/[i] 26 [/i]/
/[i] Led 2 [/i]/
0x85, 0x02, /[i] REPORT_ID 2 [/i]/
0x09, 0x02, /[i] USAGE (LED 2) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x95, 0x01, /[i] REPORT_COUNT (1) [/i]/
0xB1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x85, 0x02, /[i] REPORT_ID (2) [/i]/
0x09, 0x02, /[i] USAGE (LED 2) [/i]/
0x91, 0x82, /[i] OUTPUT (Data,Var,Abs,Vol) [/i]/
/[i] 46 [/i]/
/[i] Led 3 [/i]/
0x85, 0x03, /[i] REPORT_ID (3) [/i]/
0x09, 0x03, /[i] USAGE (LED 3) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x95, 0x01, /[i] REPORT_COUNT (1) [/i]/
0xB1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x85, 0x03, /[i] REPORT_ID (3) [/i]/
0x09, 0x03, /[i] USAGE (LED 3) [/i]/
0x91, 0x82, /[i] OUTPUT (Data,Var,Abs,Vol) [/i]/
/[i] 66 [/i]/
/[i] Led 4 [/i]/
0x85, 0x04, /[i] REPORT_ID 4) [/i]/
0x09, 0x04, /[i] USAGE (LED 4) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x95, 0x01, /[i] REPORT_COUNT (1) [/i]/
0xB1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x85, 0x04, /[i] REPORT_ID (4) [/i]/
0x09, 0x04, /[i] USAGE (LED 4) [/i]/
0x91, 0x82, /[i] OUTPUT (Data,Var,Abs,Vol) [/i]/
/[i] 86 [/i]/
/[i] key USER Button [/i]/
0x85, 0x05, /[i] REPORT_ID (5) [/i]/
0x09, 0x05, /[i] USAGE (USER Button) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x25, 0x01, /[i] LOGICAL_MAXIMUM (1) [/i]/
0x75, 0x01, /[i] REPORT_SIZE (1) [/i]/
0x81, 0x82, /[i] INPUT (Data,Var,Abs,Vol) [/i]/
0x09, 0x05, /[i] USAGE (USER Button) [/i]/
0x75, 0x01, /[i] REPORT_SIZE (1) [/i]/
0xb1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
0x75, 0x07, /[i] REPORT_SIZE (7) [/i]/
0x81, 0x83, /[i] INPUT (Cnst,Var,Abs,Vol) [/i]/
0x85, 0x05, /[i] REPORT_ID (5) [/i]/
0x75, 0x07, /[i] REPORT_SIZE (7) [/i]/
0xb1, 0x83, /[i] FEATURE (Cnst,Var,Abs,Vol) [/i]/
/[i] 114 [/i]/
/[i] ADC IN [/i]/
0x85, 0x06, /[i] REPORT_ID (6) [/i]/
0x09, 0x07, /[i] USAGE (ADC IN) [/i]/
0x15, 0x00, /[i] LOGICAL_MINIMUM (0) [/i]/
0x26, 0xff, 0x00, /[i] LOGICAL_MAXIMUM (255) [/i]/
0x75, 0x08, /[i] REPORT_SIZE (8) [/i]/
0x81, 0x82, /[i] INPUT (Data,Var,Abs,Vol) [/i]/
0x85, 0x06, /[i] REPORT_ID (6) [/i]/
0x09, 0x06, /[i] USAGE (ADC in) [/i]/
0xb1, 0x82, /[i] FEATURE (Data,Var,Abs,Vol) [/i]/
/[i] 133 [/i]/
0xc0 /[i] END_COLLECTION [/i]/
}; /[i] CustomHID_ReportDescriptor [/i]/

正如你可以从报告的描述看,所以要控制每一个元素,都必须在报告中恰当的描述。当然还有另一种解决方案 - 编写需要一个30字节的数据包的长度只有一个报告,内容你自己定义一个通用的元素。但是,如果我想使用USB HID演示,所以我不得不坚持要求该报告,在上述声明中表示标准。

结论

我有这个计划,努力不够。而唯一的原因是我的狗屎当我忽视的是,在定义中描述的设备我有一个不正确长度的描述,当然,这导致了他的中间枚举下降。哦耶。好吧,我终于,两天后,他擦额头出汗出现。所以我希望至少有一小的奖励将是我希望这是USB的第一实施HID自定义页面STM32F4探索套件的世界。

接下来的时间,我们将展示如何使用Visual Studio的C#写的东西,如USB HID演示从ST。

如果你认为你的文字和连接演示程序值得你欣赏,你可以提交你的资助。谢谢你提前给大家!你会支持其他文章的出现。
参考

材料HID这里找到。
USB HID演示你下载的ST网站在这里。

这项工作的压缩项目都可以在这里找到。

入门STM32F4套件第一个链接(开发环境等)
入门STM32F4第二连接套件(USB首页)
入门STM32F4第三连接套件(USB枚举)
入门STM32F4套件第四连接(USB虚拟COM口)
Modifikce USB HID的STM32F103链接
入门STM32F4套件第五连杆(端口名称,选择功能)
与STM32F4套件第六连杆(VGA显示器)入门

补充

尽管如此,我忘了写了A / D转换器,一个试剂盒PC的价值将中断触发时,ADC转换完成的文本。因此,它可以在处理程序的中断中找到。

本文转自:http://mcu.cz/comment-n2848.html



本文配套的图示软件,在本站百度网盘中可以找到 !请自行下载 !

关于例程中用usb的hid模式和LIS302DL三轴加速度传感器用于joy的一些记录

回复

新手交流admin 回复了问题 • 1 人关注 • 12 个回复 • 3200 次浏览 • 2014-12-26 23:45 • 来自相关话题

(快乐的搬运工)怎样给STM32产品进行加密,利用stm32的唯一ID编码的简单实现!

经验分享admin 发表了文章 • 1 个评论 • 2430 次浏览 • 2014-12-24 09:24 • 来自相关话题

产品唯一的身份标识非常适合:
● 用来作为序列号(例如USB字符序列号或者其他的终端应用)
● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
● 用来激活带安全机制的自举过程
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。
基地址:0x1FFF F7E8
每个CPU 出厂的时候都
配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......


static u32 CpuID[3];
static u32 Lock_Code;
void GetLockCode(void)
{
//获取CPU唯一ID
CpuID[0]=[url=vu32[/i]]i[url=0x1ffff7e8]/url[/url];
CpuID[1]=[url=vu32[/i]]i[url=0x1ffff7ec]/url[/url];
CpuID[2]=[url=vu32[/i]]i[url=0x1ffff7f0]/url[/url];
//加密算法,很简单的加密算法
Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
}


此处内容转自与非网论坛(stmcu.org/module/forum/thread-597912-1-1.html),感谢坛友:小里子
[quote] 多逛论坛,有益身心健康![/quote] 查看全部
产品唯一的身份标识非常适合:
● 用来作为序列号(例如USB字符序列号或者其他的终端应用)
● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
● 用来激活带安全机制的自举过程
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。
基地址:0x1FFF F7E8
每个CPU 出厂的时候都
配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......


static u32 CpuID[3];
static u32 Lock_Code;
void GetLockCode(void)
{
//获取CPU唯一ID
CpuID[0]=[url=vu32[/i]]i[url=0x1ffff7e8]/url[/url];
CpuID[1]=[url=vu32[/i]]i[url=0x1ffff7ec]/url[/url];
CpuID[2]=[url=vu32[/i]]i[url=0x1ffff7f0]/url[/url];
//加密算法,很简单的加密算法
Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
}


此处内容转自与非网论坛(stmcu.org/module/forum/thread-597912-1-1.html),感谢坛友:小里子
[quote] 多逛论坛,有益身心健康!

[/quote]

今天看到一个有趣的问题,如图所示,怎么样判断是哪个按键产生的中断呢?你知道吗

问题困惑admin 发表了文章 • 1 个评论 • 1309 次浏览 • 2014-12-23 20:51 • 来自相关话题

很有意思的一个问题
如下图所示
图中红色框中共有五处管脚,分别是
PC13 , PE13 , PB13 , PD13 , PA13
框框中的几个管脚都是对应的相同的外部中断EXIT13
问题是:
当这几个管脚都分别接一个按钮开关用来做外部中断判断,
做判断后分别用来点亮不同的LED灯.
那么问题来了:
相同的中断怎么去判断究竟是哪个管脚的开关被按下导致的呢?

你知道答案吗?
欢迎讨论 查看全部
很有意思的一个问题
如下图所示
图中红色框中共有五处管脚,分别是
PC13 , PE13 , PB13 , PD13 , PA13
框框中的几个管脚都是对应的相同的外部中断EXIT13
问题是:
当这几个管脚都分别接一个按钮开关用来做外部中断判断,
做判断后分别用来点亮不同的LED灯.
那么问题来了:
相同的中断怎么去判断究竟是哪个管脚的开关被按下导致的呢?

你知道答案吗?
欢迎讨论

d8ce9dd68a77b31e6c044f4c8ea91b60.png

(转载)关于UART中用Printf()输出float型数据

经验分享admin 发表了文章 • 2 个评论 • 2116 次浏览 • 2014-12-23 13:05 • 来自相关话题

在coocox上看到有人问关于Printf打印浮点型数据会输出0或者其他的问题
The code:
printf("float: %f \n\r", 10.02);
Produce that result:
float: H
帖子的楼猪问必须使用printf下怎么输出浮点型数据呢?
斑猪做了回答,代码如下:
The retarget printf don't support print float value now.
目前不支持float型......
然后可以做一些修改使其支持,如下
To printf float argument through UART, Semihosting or other communication method, you cannot use the Retarget Printf component in CoIDE. That component is a simple example for print int, char value.

You can do the followings:

[]Check C Library Component[/]
[]Open syscall/syscall.c, then modify the[/]

int _read(int file, char ptr, int len)
{
return 0;
}
int _write(int file, char ptr, int len)
{
return len;
}

to:
int _read(int file, char ptr, int len) {
int c, rxCount = 0;

(void) file;

while (len--) {
if ((c = GetChar()) != -1) { // Getchar Function need to be replaced by the function you used to get values.
ptr++ = c;
rxCount++;
} else {
break;
}
}

if (rxCount <= 0) {
return -1; / Error exit /
}

return rxCount;
}

int _write(int file, char ptr, int len) {
int txCount;

(void) file;

for (txCount = 0; txCount < len; txCount++) {
SendChar(ptr++); // SendChar Function need to be replaced by the function you used to print values.

}

return len;
}

[]Then you can use printf, scanf or other c library function to print and get value in your project.[/]然后斑猪又提到一点:
The old version often hung up on Win7.

The new version support SWO Trace, and quicker, more stable than the old version.

Different version of firmware need different version of driver.

The virture COM is for SWO trace for M3 chips only (which have ITM function). They cannot be use as UART to USB function.
貌似意思是用usb虚拟串口的话,这样的printf是不能这样用的...................
本文转自coocox论坛,如有冒犯请指出,谢谢 查看全部
在coocox上看到有人问关于Printf打印浮点型数据会输出0或者其他的问题
The code:
printf("float: %f \n\r", 10.02);
Produce that result:
float: H
帖子的楼猪问必须使用printf下怎么输出浮点型数据呢?
斑猪做了回答,代码如下:
The retarget printf don't support print float value now.
目前不支持float型......
然后可以做一些修改使其支持,如下
To printf float argument through UART, Semihosting or other communication method, you cannot use the Retarget Printf component in CoIDE. That component is a simple example for print int, char value.

You can do the followings:

    []Check C Library Component[/]

    []Open syscall/syscall.c, then modify the[/]


int _read(int file, char ptr, int len)
{
return 0;
}
int _write(int file, char ptr, int len)
{
return len;
}

to:
int _read(int file, char ptr, int len) {
int c, rxCount = 0;

(void) file;

while (len--) {
if ((c = GetChar()) != -1) { // Getchar Function need to be replaced by the function you used to get values.
ptr++ = c;
rxCount++;
} else {
break;
}
}

if (rxCount <= 0) {
return -1; / Error exit /
}

return rxCount;
}

int _write(int file, char ptr, int len) {
int txCount;

(void) file;

for (txCount = 0; txCount < len; txCount++) {
SendChar(ptr++); // SendChar Function need to be replaced by the function you used to print values.

}

return len;
}

    []Then you can use printf, scanf or other c library function to print and get value in your project.[/]
然后斑猪又提到一点:
The old version often hung up on Win7.

The new version support SWO Trace, and quicker, more stable than the old version.

Different version of firmware need different version of driver.

The virture COM is for SWO trace for M3 chips only (which have ITM function). They cannot be use as UART to USB function.
貌似意思是用usb虚拟串口的话,这样的printf是不能这样用的...................
本文转自coocox论坛,如有冒犯请指出,谢谢

cubemax使用stm32f103vb创建简单的led例程错误

问题困惑codesys 回复了问题 • 3 人关注 • 2 个回复 • 1705 次浏览 • 2014-12-21 10:48 • 来自相关话题

分享DS18B20单线式温度测量利用stm32cubemx的配置和完整程序代码,芯片是stm32f407

软件教程admin 发表了文章 • 8 个评论 • 3246 次浏览 • 2014-12-19 16:03 • 来自相关话题

今天去某coocox论坛,看到有人问DS18B20怎么使用,才想起来以前生成并测试过此代码
其实早就分享到了本站的资源下载里面了.
这两天也没分享和研究过什么代码,只好把它拿出来了,呵呵
代码没什么特别的,很普通的代码,关键问题是要知道单线式芯片的使用方法,知道了这个编写代码也简单
有兴趣的可以去搜搜这个片子的资料,类似这种片子还不少,使用方法大致相同
下面说说用软件stm32cubemx怎么配置和生成代码后怎么使用
本站利用管脚PA2来实现功能,只需将PA2管脚定义为[输出,无上拉,快速]模式就行了,
我这里利用usart来输出读取的温度值,故还需配置下usart1串口,串口配置暂且不提了,以前帖子里面写了很多了
生成代码后,打开工程,添加ds18b20的驱动程序,如下:
文件名: ds18b20.c


#include "ds18b20.h"
#include "delay.h"

//复位DS18B20
void DS18B20_Rst(void)
{
CLR_DS18B20(); //拉低DQ
delay_us(750); //拉低750us
SET_DS18B20();; //DQ=1
delay_us(15); //15US
}


//等待DS18B20的回应
//返回1:未检测到ds18b20的存在
//返回0:存在
uint8_t DS18B20_Check(void)
{
uint8_t retry=0;

while (DS18B20_DQ_IN&&retry<200)
{
retry++;
delay_us(1);
};
if(retry>=200)return 1;
else retry=0;
while (!DS18B20_DQ_IN&&retry<240)
{
retry++;
delay_us(1);
};
if(retry>=240)return 1;
return 0;
}


//从DS18B20读取一个位
//返回值:1/0
uint8_t DS18B20_Read_Bit(void) // read one bit
{
uint8_t data;

CLR_DS18B20(); //拉低DQ
delay_us(2);
SET_DS18B20();; //DQ=1
delay_us(12);
if(DS18B20_DQ_IN)data=1;
else data=0;
delay_us(50);

return data;
}


//从ds18b20读取一个字节
//返回值:读取到的数据
uint8_t DS18B20_Read_Byte(void) // read one byte
{
uint8_t i,j,dat;
dat=0;

for (i=1;i<=8;i++)
{
j=DS18B20_Read_Bit();
dat=(j<<7)|(dat>>1);
}
return dat;
}

//*本程序由 www.stm32cube.com 提供
//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(uint8_t dat)
{
uint8_t j;
uint8_t testb;

for (j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if (testb)
{
CLR_DS18B20(); //DS18B20_DQ_OUT=0;// Write 1
delay_us(2);
SET_DS18B20(); //DS18B20_DQ_OUT=1;
delay_us(60);
}
else
{
CLR_DS18B20(); //DS18B20_DQ_OUT=0;// Write 0
delay_us(60);
SET_DS18B20(); //DS18B20_DQ_OUT=1;
delay_us(2);
}
}
}


//开始温度转换
void DS18B20_Start(void)// ds1820 start convert
{
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0x44);// convert
}


//初始化DS18B20的IO口DQ同时检查DS的存在
//返回1:不存在
//返回0:存在
uint8_t DS18B20_Init(void)
{
//配置PA2口
GPIO_InitTypeDef GPIO_InitStruct;

/[i] GPIO Ports Clock Enable [/i]/
__GPIOA_CLK_ENABLE();

/[i]Configure GPIO pin : PA2 [/i]/
GPIO_InitStruct.Pin = DS18B20_BIT;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(DS18B20_PORT, &GPIO_InitStruct);

SET_DS18B20(); //使PA2输出高电平

DS18B20_Rst();
return DS18B20_Check();
}


//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值(-550~1250)
short DS18B20_Get_Temp(void)
{
uint8_t temp;
uint8_t TL,TH;
short tem;

DS18B20_Start (); // ds1820 start convert
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0xbe);// convert
TL=DS18B20_Read_Byte(); // LSB
TH=DS18B20_Read_Byte(); // MSB

if(TH>7)
{
TH=~TH;
TL=~TL;
temp=0; //温度为负值
}else temp=1; //温度为正
tem=TH; //获得高8位
tem<<=8;
tem+=TL; //获得低8位
tem=(float)tem*0.625; //转换
if(temp)return tem; //返回温度值
else return -tem;
}



文件名: ds18b20.h


#ifndef __DS18B20_H
#define __DS18B20_H
#include "stm32f4xx_hal.h"


#define DS18B20_BIT GPIO_PIN_2
#define DS18B20_PORT GPIOA

#define CLR_DS18B20() HAL_GPIO_WritePin (DS18B20_PORT,DS18B20_BIT,GPIO_PIN_RESET )
#define SET_DS18B20() HAL_GPIO_WritePin (DS18B20_PORT,DS18B20_BIT,GPIO_PIN_SET )

#define DS18B20_DQ_IN HAL_GPIO_ReadPin(DS18B20_PORT, DS18B20_BIT)


uint8_t DS18B20_Init(void); //初始化DS18B20
short DS18B20_Get_Temp(void); //获取温度
void DS18B20_Start(void); //开始温度转换
void DS18B20_Write_Byte(uint8_t dat);//写入一个字节
uint8_t DS18B20_Read_Byte(void); //读出一个字节
uint8_t DS18B20_Read_Bit(void); //读出一个位
uint8_t DS18B20_Check(void); //检测是否存在DS18b20
void DS18B20_Rst(void); //复位DS18B20

#endif


文件名: delay.c


#include "delay.h"

/***************************************************************************
*函数名:delay_nus()
*参数u32 n 时钟延时的微妙数
*返回值:void
*功能:使用系统节拍时钟精准延时n个微妙函数
*本程序由 www.stm32cube.com 提供
*****************************************************************************/
void delay_us(uint32_t value)
{
uint32_t i;
i = value * 50;
while(i--);
}

文件名:delay.h


#ifndef __DELAY_H
#define __DELAY_H
#include "stm32f4xx_hal.h"
/***************************************************************************
*函数名:delay_nus()
*参数u32 n 时钟延时的微妙数
*返回值:void
*功能:使用系统节拍时钟精准延时n个微妙函数
*本程序由 www.stm32cube.com 提供
*****************************************************************************/
void delay_us(uint32_t value);

#endif



以上是ds18b20所要使用的驱动程序文件,将这两个c文件添加至工程中
在main.c文件中
添加ds18b20的驱动头文件和uart的printf函数栈定义


/[i] USER CODE BEGIN 0 [/i]/
#include "ds18b20.h"
#include "stdio.h"
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /[i] __GNUC__ [/i]/

/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/[i] Place your implementation of fputc here [/i]/
/[i] e.g. write a character to the EVAL_COM1 and Loop until the end of transmission [/i]/
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/[i] USER CODE END 0 [/i]/


主函数mian()中是以下代码
int main(void)
{

/ USER CODE BEGIN 1 /
short temp;
/ USER CODE END 1 /

/ MCU Configuration----------------------------------------------------------/

/ Reset of all peripherals, Initializes the Flash interface and the Systick. /
HAL_Init();

/ Configure the system clock /
SystemClock_Config();

/ System interrupt init/
/ Sets the priority grouping field /
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

/ Initialize all configured peripherals /
MX_GPIO_Init();
MX_USART1_UART_Init();

/ USER CODE BEGIN 2 /
printf ("start:\r\n");

while(DS18B20_Init()) //初始化并检测18B20
{
printf ("DS18B20 Check Failed!");
HAL_Delay (500);
printf ("Please Check!");
HAL_Delay (500);
}




/ USER CODE END 2 /

/ USER CODE BEGIN 3 /
/ Infinite loop /
while (1)
{
HAL_Delay (500);
HAL_GPIO_TogglePin (GPIOF ,GPIO_PIN_6 ); //闪烁led指示程序运行正常
temp=DS18B20_Get_Temp();//获取温度值
printf ("Temperate:%d \r\n",temp );//输出得到的温度值到终端
}
/ USER CODE END 3 /

}
编译,后运行,串口调试助手里面会显示测量的温度值........
注意啊,ds18b20.c文件里面
uint8_t DS18B20_Init(void)
{

GPIO_InitTypeDef GPIO_InitStruct;

/ GPIO Ports Clock Enable /
__GPIOA_CLK_ENABLE();

/Configure GPIO pin : PA2 /
GPIO_InitStruct.Pin = DS18B20_BIT;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(DS18B20_PORT, &GPIO_InitStruct);

SET_DS18B20(); //ʹGPIOAµÄPin_2Êä³ö¸ßµçƽ

DS18B20_Rst();
return DS18B20_Check();
}
这个代码,上面初始化的部分由于stm32cubemx生成的时候已经初始化了,可以删掉...额
我是直接把初始化的这个剪切到了这里
如果你要用以上的代码在其他端口,只需要修改ds18b20.h中的
#define DS18B20_BIT GPIO_PIN_2
#define DS18B20_PORT GPIOA
这个就可以了.
最简洁的办法是,不要用stm32cubemx定义你准备使用的连接到ds18b20的管脚,
到时候用的时候直接来这个h文件里面修改!
结束! 查看全部
今天去某coocox论坛,看到有人问DS18B20怎么使用,才想起来以前生成并测试过此代码
其实早就分享到了本站的资源下载里面了.
这两天也没分享和研究过什么代码,只好把它拿出来了,呵呵
代码没什么特别的,很普通的代码,关键问题是要知道单线式芯片的使用方法,知道了这个编写代码也简单
有兴趣的可以去搜搜这个片子的资料,类似这种片子还不少,使用方法大致相同
下面说说用软件stm32cubemx怎么配置和生成代码后怎么使用
本站利用管脚PA2来实现功能,只需将PA2管脚定义为[输出,无上拉,快速]模式就行了,
我这里利用usart来输出读取的温度值,故还需配置下usart1串口,串口配置暂且不提了,以前帖子里面写了很多了
生成代码后,打开工程,添加ds18b20的驱动程序,如下:
文件名: ds18b20.c


#include "ds18b20.h"
#include "delay.h"

//复位DS18B20
void DS18B20_Rst(void)
{
CLR_DS18B20(); //拉低DQ
delay_us(750); //拉低750us
SET_DS18B20();; //DQ=1
delay_us(15); //15US
}


//等待DS18B20的回应
//返回1:未检测到ds18b20的存在
//返回0:存在
uint8_t DS18B20_Check(void)
{
uint8_t retry=0;

while (DS18B20_DQ_IN&&retry<200)
{
retry++;
delay_us(1);
};
if(retry>=200)return 1;
else retry=0;
while (!DS18B20_DQ_IN&&retry<240)
{
retry++;
delay_us(1);
};
if(retry>=240)return 1;
return 0;
}


//从DS18B20读取一个位
//返回值:1/0
uint8_t DS18B20_Read_Bit(void) // read one bit
{
uint8_t data;

CLR_DS18B20(); //拉低DQ
delay_us(2);
SET_DS18B20();; //DQ=1
delay_us(12);
if(DS18B20_DQ_IN)data=1;
else data=0;
delay_us(50);

return data;
}


//从ds18b20读取一个字节
//返回值:读取到的数据
uint8_t DS18B20_Read_Byte(void) // read one byte
{
uint8_t i,j,dat;
dat=0;

for (i=1;i<=8;i++)
{
j=DS18B20_Read_Bit();
dat=(j<<7)|(dat>>1);
}
return dat;
}

//*本程序由 www.stm32cube.com 提供
//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(uint8_t dat)
{
uint8_t j;
uint8_t testb;

for (j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if (testb)
{
CLR_DS18B20(); //DS18B20_DQ_OUT=0;// Write 1
delay_us(2);
SET_DS18B20(); //DS18B20_DQ_OUT=1;
delay_us(60);
}
else
{
CLR_DS18B20(); //DS18B20_DQ_OUT=0;// Write 0
delay_us(60);
SET_DS18B20(); //DS18B20_DQ_OUT=1;
delay_us(2);
}
}
}


//开始温度转换
void DS18B20_Start(void)// ds1820 start convert
{
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0x44);// convert
}


//初始化DS18B20的IO口DQ同时检查DS的存在
//返回1:不存在
//返回0:存在
uint8_t DS18B20_Init(void)
{
//配置PA2口
GPIO_InitTypeDef GPIO_InitStruct;

/[i] GPIO Ports Clock Enable [/i]/
__GPIOA_CLK_ENABLE();

/[i]Configure GPIO pin : PA2 [/i]/
GPIO_InitStruct.Pin = DS18B20_BIT;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(DS18B20_PORT, &GPIO_InitStruct);

SET_DS18B20(); //使PA2输出高电平

DS18B20_Rst();
return DS18B20_Check();
}


//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值(-550~1250)
short DS18B20_Get_Temp(void)
{
uint8_t temp;
uint8_t TL,TH;
short tem;

DS18B20_Start (); // ds1820 start convert
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0xbe);// convert
TL=DS18B20_Read_Byte(); // LSB
TH=DS18B20_Read_Byte(); // MSB

if(TH>7)
{
TH=~TH;
TL=~TL;
temp=0; //温度为负值
}else temp=1; //温度为正
tem=TH; //获得高8位
tem<<=8;
tem+=TL; //获得低8位
tem=(float)tem*0.625; //转换
if(temp)return tem; //返回温度值
else return -tem;
}



文件名: ds18b20.h


#ifndef __DS18B20_H
#define __DS18B20_H
#include "stm32f4xx_hal.h"


#define DS18B20_BIT GPIO_PIN_2
#define DS18B20_PORT GPIOA

#define CLR_DS18B20() HAL_GPIO_WritePin (DS18B20_PORT,DS18B20_BIT,GPIO_PIN_RESET )
#define SET_DS18B20() HAL_GPIO_WritePin (DS18B20_PORT,DS18B20_BIT,GPIO_PIN_SET )

#define DS18B20_DQ_IN HAL_GPIO_ReadPin(DS18B20_PORT, DS18B20_BIT)


uint8_t DS18B20_Init(void); //初始化DS18B20
short DS18B20_Get_Temp(void); //获取温度
void DS18B20_Start(void); //开始温度转换
void DS18B20_Write_Byte(uint8_t dat);//写入一个字节
uint8_t DS18B20_Read_Byte(void); //读出一个字节
uint8_t DS18B20_Read_Bit(void); //读出一个位
uint8_t DS18B20_Check(void); //检测是否存在DS18b20
void DS18B20_Rst(void); //复位DS18B20

#endif


文件名: delay.c


#include "delay.h"

/***************************************************************************
*函数名:delay_nus()
*参数u32 n 时钟延时的微妙数
*返回值:void
*功能:使用系统节拍时钟精准延时n个微妙函数
*本程序由 www.stm32cube.com 提供
*****************************************************************************/
void delay_us(uint32_t value)
{
uint32_t i;
i = value * 50;
while(i--);
}

文件名:delay.h


#ifndef __DELAY_H
#define __DELAY_H
#include "stm32f4xx_hal.h"
/***************************************************************************
*函数名:delay_nus()
*参数u32 n 时钟延时的微妙数
*返回值:void
*功能:使用系统节拍时钟精准延时n个微妙函数
*本程序由 www.stm32cube.com 提供
*****************************************************************************/
void delay_us(uint32_t value);

#endif



以上是ds18b20所要使用的驱动程序文件,将这两个c文件添加至工程中
在main.c文件中
添加ds18b20的驱动头文件和uart的printf函数栈定义


/[i] USER CODE BEGIN 0 [/i]/
#include "ds18b20.h"
#include "stdio.h"
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /[i] __GNUC__ [/i]/

/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/[i] Place your implementation of fputc here [/i]/
/[i] e.g. write a character to the EVAL_COM1 and Loop until the end of transmission [/i]/
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/[i] USER CODE END 0 [/i]/


主函数mian()中是以下代码
int main(void)
{

/ USER CODE BEGIN 1 /
short temp;
/ USER CODE END 1 /

/ MCU Configuration----------------------------------------------------------/

/ Reset of all peripherals, Initializes the Flash interface and the Systick. /
HAL_Init();

/ Configure the system clock /
SystemClock_Config();

/ System interrupt init/
/ Sets the priority grouping field /
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

/ Initialize all configured peripherals /
MX_GPIO_Init();
MX_USART1_UART_Init();

/ USER CODE BEGIN 2 /
printf ("start:\r\n");

while(DS18B20_Init()) //初始化并检测18B20
{
printf ("DS18B20 Check Failed!");
HAL_Delay (500);
printf ("Please Check!");
HAL_Delay (500);
}




/ USER CODE END 2 /

/ USER CODE BEGIN 3 /
/ Infinite loop /
while (1)
{
HAL_Delay (500);
HAL_GPIO_TogglePin (GPIOF ,GPIO_PIN_6 ); //闪烁led指示程序运行正常
temp=DS18B20_Get_Temp();//获取温度值
printf ("Temperate:%d \r\n",temp );//输出得到的温度值到终端
}
/ USER CODE END 3 /

}
编译,后运行,串口调试助手里面会显示测量的温度值........
注意啊,ds18b20.c文件里面
uint8_t DS18B20_Init(void)
{

GPIO_InitTypeDef GPIO_InitStruct;

/ GPIO Ports Clock Enable /
__GPIOA_CLK_ENABLE();

/Configure GPIO pin : PA2 /
GPIO_InitStruct.Pin = DS18B20_BIT;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
HAL_GPIO_Init(DS18B20_PORT, &GPIO_InitStruct);

SET_DS18B20(); //ʹGPIOAµÄPin_2Êä³ö¸ßµçƽ

DS18B20_Rst();
return DS18B20_Check();
}
这个代码,上面初始化的部分由于stm32cubemx生成的时候已经初始化了,可以删掉...额
我是直接把初始化的这个剪切到了这里
如果你要用以上的代码在其他端口,只需要修改ds18b20.h中的
#define DS18B20_BIT GPIO_PIN_2
#define DS18B20_PORT GPIOA
这个就可以了.
最简洁的办法是,不要用stm32cubemx定义你准备使用的连接到ds18b20的管脚,
到时候用的时候直接来这个h文件里面修改!
结束!

有谁用cube做过CAN实验,遇到了一些问题需要请教一下~

问题困惑admin 回复了问题 • 3 人关注 • 2 个回复 • 1948 次浏览 • 2014-12-19 12:58 • 来自相关话题

关于串口中断的使用

问题困惑admin 回复了问题 • 1 人关注 • 2 个回复 • 1837 次浏览 • 2014-12-19 09:01 • 来自相关话题

分享:当串口com的端口号太大怎么办?下面教你解除串口端口占用

经验分享admin 发表了文章 • 0 个评论 • 2202 次浏览 • 2014-12-16 22:50 • 来自相关话题

大多数时候电脑的com口没用到但是com口的端口号却不会从小到大来.....
下面教你解除那些占着茅坑不拉屎的端口的方法
虽然现在串口使用的不多了,但是有的时候还是会用上,但是在我门偶尔要使用串口(COM口)的时候却发现,它总是提示被占用(在使用中),而程序又限定了端口号,这个是有我们只有想办法解决串口/COM端口被占用(在使用中)的问题了

第一,检查这个端口是不是有设备在使用,如果有,可以先断开这个设备,让开位置来

第二,也是常见的问题,被某些软件占用了,解决方法如下

点击左下角“开始”菜单——“运行”——输入“regedit”——点击“确定”,打开注册表编辑器。

依照这个路径打开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter”

删除右侧的“ComDb”值
双击comdb字样,弹出输入框,全选删除,ok
插入串口线,设备管理器里面删除掉此时的端口,或者修改为其他端口,若是删除的,则再次插入后自动变更. 查看全部
大多数时候电脑的com口没用到但是com口的端口号却不会从小到大来.....
下面教你解除那些占着茅坑不拉屎的端口的方法
虽然现在串口使用的不多了,但是有的时候还是会用上,但是在我门偶尔要使用串口(COM口)的时候却发现,它总是提示被占用(在使用中),而程序又限定了端口号,这个是有我们只有想办法解决串口/COM端口被占用(在使用中)的问题了

第一,检查这个端口是不是有设备在使用,如果有,可以先断开这个设备,让开位置来

第二,也是常见的问题,被某些软件占用了,解决方法如下

点击左下角“开始”菜单——“运行”——输入“regedit”——点击“确定”,打开注册表编辑器。

依照这个路径打开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter”

删除右侧的“ComDb”值
双击comdb字样,弹出输入框,全选删除,ok
插入串口线,设备管理器里面删除掉此时的端口,或者修改为其他端口,若是删除的,则再次插入后自动变更.

stm32的usb虚拟串口驱动win7系统64位和32位不能正常安装的解决办法!stm32 virtual comport win7(终极解决办法)

经验分享admin 发表了文章 • 10 个评论 • 16248 次浏览 • 2014-12-16 13:48 • 来自相关话题

这两天用stm32f4discovery板搞usb虚拟串口,程序用stm32cubemx自动生成
生成的程序中用到了malloc这样的内存分配函数...
导致程序不能正常跑起来,也无法识别,
[相关驱动和文件本站网盘里有]
32位电脑请下载:usb虚拟串口缺失文件和驱动(32位系统x86专用).zip

64位电脑下载:usb虚拟串口缺失文件和驱动(X64位系统用).zip
下载地址:http://pan.baidu.com/s/1gdhcja7

下面都是屁话了.........

经on the way提醒修改了下,PC上面能识别出 [ stm virual comport ]这个设备
但是显示的是叹号,于是拔掉串口连接线,安装ST公司提供的虚拟串口驱动
请去下载 STM32 USB转串口驱动 Virtual COM Port Driver(V1.3.1)版本
这个安装一次完成(切记此时不要连接usb线)
完成后,连接usb虚拟串口的连接线,自动安装驱动
之后由于我的是win7 32位 Ghost系统,而且我安装过电脑管家一类的软件
曾经用清理工具把系统内不用的驱动清理过,所以关键的usbser.sys什么的都没有,
但是下载后添加到系统内还是不行。
**丢失的文件有: mdmcpq.inf 和 usbser.sys
下载这两个文件后,将mdmcpq.inf复制到c:/windows/inf/里面去
将usbser.sys复制到C:/windows/system32/drivers/里面去**
然后重新插入usb线,并在设备管理器界面右键选更新驱动,
仍然提示 已经是最新驱动,安装失败的提示
此时修改c:/windows/inf/里面的mdmcpq.inf文件内容
将里面的
**[FakeModemCopyFileSection]
usbser.sys,,,0x20
修改为
[FakeModemCopyFileSection]
;usbser.sys,,,0x20**
即,在usber.sys之前添加一个分号,然后保存,回到设备管理,更新驱动,OK





大家还有疑问的可以留言,我这次试验了N中办法,就上面的是有效的.
等我回家后试试我电脑win7 64位的如何
实验表明XP和win7 32位可用.............
TNND,win7 64电脑还是不行,百度了下,有人说是64位和32位的usbser.sys不一样,我倒....
我再去找找,坑爹啊,回到家不能用......
再去找找.....发现是usbser.sys问题,已解决 查看全部
这两天用stm32f4discovery板搞usb虚拟串口,程序用stm32cubemx自动生成
生成的程序中用到了malloc这样的内存分配函数...
导致程序不能正常跑起来,也无法识别,
[相关驱动和文件本站网盘里有]
32位电脑请下载:usb虚拟串口缺失文件和驱动(32位系统x86专用).zip

64位电脑下载:usb虚拟串口缺失文件和驱动(X64位系统用).zip
下载地址:http://pan.baidu.com/s/1gdhcja7

下面都是屁话了.........

经on the way提醒修改了下,PC上面能识别出 [ stm virual comport ]这个设备
但是显示的是叹号,于是拔掉串口连接线,安装ST公司提供的虚拟串口驱动
请去下载 STM32 USB转串口驱动 Virtual COM Port Driver(V1.3.1)版本
这个安装一次完成(切记此时不要连接usb线)
完成后,连接usb虚拟串口的连接线,自动安装驱动
之后由于我的是win7 32位 Ghost系统,而且我安装过电脑管家一类的软件
曾经用清理工具把系统内不用的驱动清理过,所以关键的usbser.sys什么的都没有,
但是下载后添加到系统内还是不行。
**丢失的文件有: mdmcpq.inf 和 usbser.sys
下载这两个文件后,将mdmcpq.inf复制到c:/windows/inf/里面去
将usbser.sys复制到C:/windows/system32/drivers/里面去**
然后重新插入usb线,并在设备管理器界面右键选更新驱动,
仍然提示 已经是最新驱动,安装失败的提示
此时修改c:/windows/inf/里面的mdmcpq.inf文件内容
将里面的
**[FakeModemCopyFileSection]
usbser.sys,,,0x20
修改为
[FakeModemCopyFileSection]
;usbser.sys,,,0x20**
即,在usber.sys之前添加一个分号,然后保存,回到设备管理,更新驱动,OK

无标题.png

大家还有疑问的可以留言,我这次试验了N中办法,就上面的是有效的.
等我回家后试试我电脑win7 64位的如何
实验表明XP和win7 32位可用.............
TNND,win7 64电脑还是不行,百度了下,有人说是64位和32位的usbser.sys不一样,我倒....
我再去找找,坑爹啊,回到家不能用......
再去找找.....发现是usbser.sys问题,已解决

stm32 F407, 用Cube做以太网通信不成功,请指教

问题困惑admin 回复了问题 • 5 人关注 • 1 个回复 • 4538 次浏览 • 2014-12-12 16:42 • 来自相关话题

分享stm32cubemx软件和各芯片驱动包下载和手动安装驱动包的方法

软件教程admin 发表了文章 • 64 个评论 • 78833 次浏览 • 2014-11-17 12:59 • 来自相关话题

由于先前分享中同时转载有其他网盘文件,
遭到版权方投诉侵权!
导致分享文件均被强制撤回!

先前如有冒犯版权作者请见谅!

**本站专用百度网盘:
http://pan.baidu.com/s/1gdhcja7**

网盘里包含本站所有实验程序和相关软件,随时更新!
同时欢迎大家提供相关程序和好用的软件!
提交到邮箱: AD@Stm32cube.com


文件列表如下;
文件名 大小 修改日期
24c02_IGT已调试成功可连续写入.zip
5.3M 2014-12-10 22:10
AN2784 使用大容量STM32F10xxx的FSMC驱动外部的存储器.pdf
715KB 2015-01-06 22:25
ATxmega单片机自动分页写24c02代码.zip
2KB 2015-02-08 20:46
AVR_XMEGA_应用教程.pdf
1.5M 2015-03-23 15:50
Atxmega64A3单片机读写24C64.zip
2KB 2015-02-11 09:36
CAN_Loopback实验.zip
5M 2014-12-31 15:19
CANopen协议分析指南.zip
898KB 2015-01-03 13:07
CAN总线原理和应用系统设计.pdf
6.5M 2015-01-18 14:15
CH372-DRIVER示例.zip
38KB 2015-04-14 16:13
CoIDE-V2Beta-20141205(ARM编程软件需GCC编译器).exe
111.9M 2014-12-21 14:32
Cube关于usb驱动库介绍.pdf
1.2M 2015-02-13 15:42
C浮点数与字符转换工具.exe
28KB 2015-03-03 21:00
F103芯片fsmc操作nand官方中文.pdf
715KB 2014-12-31 10:17
F303-i2c-neu(来自中文论坛-【福清】Paderboy分享).rar
2.8M 2015-07-27 10:44
FSMC_NAND(无坏块管理).rar
831KB 2015-01-05 19:15
HAL驱动详解.pdf
4.5M 2014-11-22 19:55
ICCAVR+V6.31带注册机.rar
4.5M 2014-11-22 19:55
IIC模拟程序(驱动部分).zip
3KB 2015-02-06 15:57
KEIL MDK4.60crack破解文件.zip
16KB 2014-11-22 19:55
LCD时序图怎么读.doc
561KB 2015-03-10 21:11
LED(Systick(非中断方式)精确定时闪烁).zip
906KB 2015-03-23 16:59
MEMS_stm32f4_discovery参考程序.zip
45KB 2015-01-06 22:58
ModBusPol(本站freemodbus移植所用软件之一).rar
3.6M 2015-01-05 19:57
STM32Cube USB device library (2).pdf
1.4M 2014-12-14 13:21
STM32F303RET-TIM2-ADC2-ADC4-DMA-UART(来自中文论坛-[福清]Paderboy分享).rar
4.5M 2015-07-27 16:56
STM32F4xx中文参考手册.zip
12.3M 2015-05-20 11:37
STM32_PID.rar
484KB 2015-01-08 16:34
STM32串口环形队列.rar
1.2M 2015-01-18 20:07
STM32自学笔记.pdf
35.8M 2014-11-22 19:55
ST专用虚拟com口驱动工具stm32 virtual com.zip
2.2M 2014-12-05 15:07
UART.rar
3.1M 2015-01-06 13:59
UCOSIII_freemodbus.7z
428KB 2014-12-12 19:45
USB_MIDI协议.pdf
184KB 2014-12-14 13:21
USB芯片Ch372和Ch375调试助手.zip
8KB 2015-03-03 22:35
UsbHidDemonstrator.zip
4.8M 2015-01-12 17:21
VS2012_ULT_chs.iso
1.53G 2015-01-21 09:57
VS_VisualAssistX_2012破解版.zip
13.3M 2015-03-24 13:30
VisualGDB-4.2r4.rar
6.1M 2015-02-13 15:19
WPF编程宝典:使用C#2012和NET 4.5 第4版_13353713.pdf
89.7M 2015-03-07 22:03
YXD-1602G LCM.pdf
188KB 2015-03-08 18:42
ad_dma_duo多路DMA采集示例.zip
10.9M 2015-01-05 19:56
altium designer14.3.14.iso
2.97G 2015-03-23 16:03
bushound5.0使用.pdf
360KB 2015-01-12 11:47
bushound50.rar
594KB 2015-02-02 20:32
chromeinstall-7u60.exe
897KB 2014-11-22 19:55
cube输入捕获红外解码-芯片F103(坛友:整个夏天 提供).docx
333KB 2015-02-28 21:29
freemodbus-v1.5.0(原版官方文件).zip
4.2M 2015-01-05 19:58
freemodbus_stm32F407_stm32cubemx移植成功.zip
9.1M 2015-01-05 19:44
gcc-arm-win32编译器(辅助CoIDE编译器用).exe
81.9M 2014-12-21 14:31
lcd1602资料.pdf
621KB 2015-03-08 20:16
malloc.zip
2KB 2014-12-16 19:02
mdk474.exe
576.8M 2014-11-22 19:55
modbus协议解析.pdf
1.5M 2015-01-05 19:57
pcl6045b_四轴运动控制芯片_中文说明.pdf
14.1M 2015-01-08 15:20
st-link_v2_usbdriver.zip
9.9M 2014-11-22 19:55
stm32F405_407XX.pdf
5.7M 2015-05-15 15:10
stm32F407-四线方式操作lcd1602(型号YXD-1602G02).zip
8.9M 2015-04-15 16:48
stm32L0.pdf
10.1M 2014-11-22 19:55
stm32cube-crc校验例程.zip
9.1M 2015-04-21 10:20
stm32cube.com_RTOS文档.pdf
710KB 2014-12-31 16:09
stm32cube_tcp_ip操作.pdf
1000KB 2014-12-31 09:59
stm32cubemx软件和驱动库下载
[]2015-04-21 16:37[/]stm32cube使用教程1-流水灯怎样用软件设置和编写的.pdf
2.6M 2014-11-22 19:55
stm32f3-usb-vcom-echo.zip
525KB 2015-03-17 11:42
stm32f407_eval学习板原理图SCH和PCB图.zip
2.7M 2014-12-12 21:16
stm32f407_pwm_uart.zip
10.3M 2015-04-20 15:40
stm32f407使用DS18b20测试温度.zip
5M 2014-12-10 22:13
stm32f4discovery_sch.zip
300KB 2014-11-22 19:55
usb_cdc简单实验.rar
5.5M 2015-01-05 18:51
usb_hid测试代码F407discovery板(配合官方Demonstrator发送和接收).zip
7.4M 2015-01-18 17:56
usb虚拟串口缺失文件和驱动(32位系统x86专用).zip
5.7M 2014-12-16 21:07
usb虚拟串口缺失文件和驱动(X64位系统用).zip
5.7M 2014-12-16 21:04
《STM32自学笔记》随书资料.rar
22M 2014-11-22 19:55
【STM32神舟III号实验例程】——NAND FLASH访问实验(实验十四) - .pdf
12.2M 2015-01-04 11:25
一些cube实验程序.zip
65.6M 2014-11-28 09:09
你好,放大器.pdf
9M 2015-04-16 15:25
使用 STM32F40507xx 和 STM32F415417xx微控制器的浮点运算单元.pdf
282KB 2015-02-02 22:42
使用 U 盘更新 STM32F4DISCOVERY 板固件.pdf
463KB 2015-04-28 17:26
使用stm32F2XX和4XX微控器时,如何提供ADC精度.PDF
602KB 2015-03-26 19:45
关于stm32cube对SRAM的操作和设置.zip
5.3M 2015-01-22 11:39
周立功◆ARM嵌入式系统实验教程(一).pdf
2.9M 2015-07-02 13:59
周立功◆ARM嵌入式系统实验教程(三).pdf
2.9M 2015-07-02 14:02
国外写的usb虚拟串口程序STM32DiscoveryVCP-master.zip
209KB 2014-12-05 15:07
圈圈教你玩USB.pdf
25M 2015-06-04 14:07
基于STM32的 PMSM FOC软件库培训.zip
2.5M 2015-05-06 14:22
基于STM32的USB程序开发笔记(stm32cubemx.com中文网提供).pdf
2.4M 2014-12-05 15:34
基于stm32cubef4(HAL驱动,非固件库)的httpserver-socket(freertos lwip)在407上调试成功(RMII模式).7z
24.2M 2015-01-06 13:59
如何编写应用程序与USB_HID_设备通讯(读写USB_HID设备).pdf
1.1M 2015-03-26 11:56
安富莱STM32-V5开发板STemWin教程1-60期.pdf
15M 2015-05-27 09:35
实例讲解USB的枚举(配置)过程.pdf
1.1M 2015-03-26 11:53
教你使用1602液晶_详细的中文指导_兼容51、AVR、PIC单片机.pdf
973KB 2015-04-17 13:52
最新stm32f407zgt-sram-cubemx.zip
9.5M 2015-04-21 11:59
本站演示所用串口调试助手(推荐).zip
133KB 2015-01-05 19:55
模拟工程师速查参考.pdf
7.1M 2015-04-17 09:44
深入解析STM32_USB-FS-Device_Lib库.pdf
697KB 2014-12-05 15:30
用STM32CubeMX初始化SD卡终于好使了 STM32F407 .png
308KB 2015-01-06 22:22
电机控制中的MOSFET和IGBT基础知识.pdf
401KB 2015-04-17 09:27
虚拟串口工具.zip
4.7M 2015-01-27 12:50
西门子PLC上所使用的软件PID程序.zip
1.1M 2015-01-03 21:07
设计原理图.pdf
38KB 2015-04-14 15:12
12864_uc1701.zip
5.6M 2015-05-19 12:00
(中文)使用STM32F2xx 和STM32F4xx 微控制器时如何提高ADC 测量精度.PDF
602KB 2015-01-29 12:59
(感谢QQ群成员-一毛-提供)F4多通道ADC+DMA+UART采集数据.zip
8.5M 2015-07-27 16:39
(电机驱动库官方版4.0)STM32_FOC_SDK_4.0.0.zip
70.8M 2015-05-06 14:45


mx更新内容如下:
Added support of code generation, clock and power consumption calculation for the new part numbers of STM32F7 series.
Management of the dependency and configuration of external I/O, when required by a peripheral
STM32CubeMX can now be installed from a console.
STM32CubeMX supports now a command line mode.
F4更新如下:
Add support of System Workbench for STM32 (SW4STM32) toolchain
Maintenance release to fix known defects, in HAL and Projects

b更新STM32Cubemx软件到4.8.0版本[/b]
------------->文件名:stm32cubemx-4.8.0.zip
(2015.3.24)更新STM32cubeF4驱动库到1.6.0版本
--------------->文件名:stm32cubef4-1.6.0.zip


喜讯: Cube支持F1系列了!
请大家务必更新!

重新上传了!以前那个没法添加后续更新文件,晕死
最近有童鞋新入手stm32cubemx软件,但是不知道怎么安装和更新,尤其是软件自动更新慢如蜗牛,
惨不忍睹,导致很多人放弃了.
在此,分享下官方最新安装包和驱动包,
本帖也会长期更新驱动的更新和官方提供的中文PDF文档下载
希望对童鞋们节省翻墙的时间................
不废话了,上地址,百度网盘

另外,官方提供的示例代码在各芯片的驱动库里面,详情请看下面的帖子
http://www.stm32cube.com/question/17
我已经将下面所有介绍到的文件都共享到上面的地址里面了
大家下载的时候按照下面的介绍文件名选择下载

首先是stm32cubemx的安装程序,最新版本是4.4.0(于2014,11,17更新)
文件名: stm32cubemx-4.4.0.zip

安装mx之后必须按照你要用到的芯片型号选择驱动包下载,
文件名类似: stm32cubef4-1.3.0.zip





下面介绍下安装驱动包的步骤:
在C盘新建一个文件夹,必须英文,也可以不是c盘,随你便




将你需要安装的驱动包下载后,解压到这个文件夹里面,无需修改任何东西
返回到stm32cubemx软件,找到heip点击 updater setting,在里面选择刚才新建的文件夹















好了,已经安装好了
你可以点击help里面的install new library查看下






软件和驱动包都安装好了.
下面说下生成程序最好设置的一个地方





这样,生成程序的时候对应的外设会分别生成.c文件,便于管理,层次更清晰
推荐使用keil4.74版本,前面的下载里面有最新的mdk474下载,里面有个绿化工具
推荐大家购买正版.
keil4.70以上版本可以支持自动补全功能,非常方便,虽然没viral stdio好用,但是也很好了.呵呵
以后慢慢更新官方发布的中文使用文档 查看全部
由于先前分享中同时转载有其他网盘文件,
遭到版权方投诉侵权!
导致分享文件均被强制撤回!

先前如有冒犯版权作者请见谅!

**本站专用百度网盘:
http://pan.baidu.com/s/1gdhcja7**

网盘里包含本站所有实验程序和相关软件,随时更新!
同时欢迎大家提供相关程序和好用的软件!
提交到邮箱: AD@Stm32cube.com


文件列表如下;
文件名 大小 修改日期
24c02_IGT已调试成功可连续写入.zip
5.3M 2014-12-10 22:10
AN2784 使用大容量STM32F10xxx的FSMC驱动外部的存储器.pdf
715KB 2015-01-06 22:25
ATxmega单片机自动分页写24c02代码.zip
2KB 2015-02-08 20:46
AVR_XMEGA_应用教程.pdf
1.5M 2015-03-23 15:50
Atxmega64A3单片机读写24C64.zip
2KB 2015-02-11 09:36
CAN_Loopback实验.zip
5M 2014-12-31 15:19
CANopen协议分析指南.zip
898KB 2015-01-03 13:07
CAN总线原理和应用系统设计.pdf
6.5M 2015-01-18 14:15
CH372-DRIVER示例.zip
38KB 2015-04-14 16:13
CoIDE-V2Beta-20141205(ARM编程软件需GCC编译器).exe
111.9M 2014-12-21 14:32
Cube关于usb驱动库介绍.pdf
1.2M 2015-02-13 15:42
C浮点数与字符转换工具.exe
28KB 2015-03-03 21:00
F103芯片fsmc操作nand官方中文.pdf
715KB 2014-12-31 10:17
F303-i2c-neu(来自中文论坛-【福清】Paderboy分享).rar
2.8M 2015-07-27 10:44
FSMC_NAND(无坏块管理).rar
831KB 2015-01-05 19:15
HAL驱动详解.pdf
4.5M 2014-11-22 19:55
ICCAVR+V6.31带注册机.rar
4.5M 2014-11-22 19:55
IIC模拟程序(驱动部分).zip
3KB 2015-02-06 15:57
KEIL MDK4.60crack破解文件.zip
16KB 2014-11-22 19:55
LCD时序图怎么读.doc
561KB 2015-03-10 21:11
LED(Systick(非中断方式)精确定时闪烁).zip
906KB 2015-03-23 16:59
MEMS_stm32f4_discovery参考程序.zip
45KB 2015-01-06 22:58
ModBusPol(本站freemodbus移植所用软件之一).rar
3.6M 2015-01-05 19:57
STM32Cube USB device library (2).pdf
1.4M 2014-12-14 13:21
STM32F303RET-TIM2-ADC2-ADC4-DMA-UART(来自中文论坛-[福清]Paderboy分享).rar
4.5M 2015-07-27 16:56
STM32F4xx中文参考手册.zip
12.3M 2015-05-20 11:37
STM32_PID.rar
484KB 2015-01-08 16:34
STM32串口环形队列.rar
1.2M 2015-01-18 20:07
STM32自学笔记.pdf
35.8M 2014-11-22 19:55
ST专用虚拟com口驱动工具stm32 virtual com.zip
2.2M 2014-12-05 15:07
UART.rar
3.1M 2015-01-06 13:59
UCOSIII_freemodbus.7z
428KB 2014-12-12 19:45
USB_MIDI协议.pdf
184KB 2014-12-14 13:21
USB芯片Ch372和Ch375调试助手.zip
8KB 2015-03-03 22:35
UsbHidDemonstrator.zip
4.8M 2015-01-12 17:21
VS2012_ULT_chs.iso
1.53G 2015-01-21 09:57
VS_VisualAssistX_2012破解版.zip
13.3M 2015-03-24 13:30
VisualGDB-4.2r4.rar
6.1M 2015-02-13 15:19
WPF编程宝典:使用C#2012和NET 4.5 第4版_13353713.pdf
89.7M 2015-03-07 22:03
YXD-1602G LCM.pdf
188KB 2015-03-08 18:42
ad_dma_duo多路DMA采集示例.zip
10.9M 2015-01-05 19:56
altium designer14.3.14.iso
2.97G 2015-03-23 16:03
bushound5.0使用.pdf
360KB 2015-01-12 11:47
bushound50.rar
594KB 2015-02-02 20:32
chromeinstall-7u60.exe
897KB 2014-11-22 19:55
cube输入捕获红外解码-芯片F103(坛友:整个夏天 提供).docx
333KB 2015-02-28 21:29
freemodbus-v1.5.0(原版官方文件).zip
4.2M 2015-01-05 19:58
freemodbus_stm32F407_stm32cubemx移植成功.zip
9.1M 2015-01-05 19:44
gcc-arm-win32编译器(辅助CoIDE编译器用).exe
81.9M 2014-12-21 14:31
lcd1602资料.pdf
621KB 2015-03-08 20:16
malloc.zip
2KB 2014-12-16 19:02
mdk474.exe
576.8M 2014-11-22 19:55
modbus协议解析.pdf
1.5M 2015-01-05 19:57
pcl6045b_四轴运动控制芯片_中文说明.pdf
14.1M 2015-01-08 15:20
st-link_v2_usbdriver.zip
9.9M 2014-11-22 19:55
stm32F405_407XX.pdf
5.7M 2015-05-15 15:10
stm32F407-四线方式操作lcd1602(型号YXD-1602G02).zip
8.9M 2015-04-15 16:48
stm32L0.pdf
10.1M 2014-11-22 19:55
stm32cube-crc校验例程.zip
9.1M 2015-04-21 10:20
stm32cube.com_RTOS文档.pdf
710KB 2014-12-31 16:09
stm32cube_tcp_ip操作.pdf
1000KB 2014-12-31 09:59
stm32cubemx软件和驱动库下载
    []2015-04-21 16:37[/]
stm32cube使用教程1-流水灯怎样用软件设置和编写的.pdf
2.6M 2014-11-22 19:55
stm32f3-usb-vcom-echo.zip
525KB 2015-03-17 11:42
stm32f407_eval学习板原理图SCH和PCB图.zip
2.7M 2014-12-12 21:16
stm32f407_pwm_uart.zip
10.3M 2015-04-20 15:40
stm32f407使用DS18b20测试温度.zip
5M 2014-12-10 22:13
stm32f4discovery_sch.zip
300KB 2014-11-22 19:55
usb_cdc简单实验.rar
5.5M 2015-01-05 18:51
usb_hid测试代码F407discovery板(配合官方Demonstrator发送和接收).zip
7.4M 2015-01-18 17:56
usb虚拟串口缺失文件和驱动(32位系统x86专用).zip
5.7M 2014-12-16 21:07
usb虚拟串口缺失文件和驱动(X64位系统用).zip
5.7M 2014-12-16 21:04
《STM32自学笔记》随书资料.rar
22M 2014-11-22 19:55
【STM32神舟III号实验例程】——NAND FLASH访问实验(实验十四) - .pdf
12.2M 2015-01-04 11:25
一些cube实验程序.zip
65.6M 2014-11-28 09:09
你好,放大器.pdf
9M 2015-04-16 15:25
使用 STM32F40507xx 和 STM32F415417xx微控制器的浮点运算单元.pdf
282KB 2015-02-02 22:42
使用 U 盘更新 STM32F4DISCOVERY 板固件.pdf
463KB 2015-04-28 17:26
使用stm32F2XX和4XX微控器时,如何提供ADC精度.PDF
602KB 2015-03-26 19:45
关于stm32cube对SRAM的操作和设置.zip
5.3M 2015-01-22 11:39
周立功◆ARM嵌入式系统实验教程(一).pdf
2.9M 2015-07-02 13:59
周立功◆ARM嵌入式系统实验教程(三).pdf
2.9M 2015-07-02 14:02
国外写的usb虚拟串口程序STM32DiscoveryVCP-master.zip
209KB 2014-12-05 15:07
圈圈教你玩USB.pdf
25M 2015-06-04 14:07
基于STM32的 PMSM FOC软件库培训.zip
2.5M 2015-05-06 14:22
基于STM32的USB程序开发笔记(stm32cubemx.com中文网提供).pdf
2.4M 2014-12-05 15:34
基于stm32cubef4(HAL驱动,非固件库)的httpserver-socket(freertos lwip)在407上调试成功(RMII模式).7z
24.2M 2015-01-06 13:59
如何编写应用程序与USB_HID_设备通讯(读写USB_HID设备).pdf
1.1M 2015-03-26 11:56
安富莱STM32-V5开发板STemWin教程1-60期.pdf
15M 2015-05-27 09:35
实例讲解USB的枚举(配置)过程.pdf
1.1M 2015-03-26 11:53
教你使用1602液晶_详细的中文指导_兼容51、AVR、PIC单片机.pdf
973KB 2015-04-17 13:52
最新stm32f407zgt-sram-cubemx.zip
9.5M 2015-04-21 11:59
本站演示所用串口调试助手(推荐).zip
133KB 2015-01-05 19:55
模拟工程师速查参考.pdf
7.1M 2015-04-17 09:44
深入解析STM32_USB-FS-Device_Lib库.pdf
697KB 2014-12-05 15:30
用STM32CubeMX初始化SD卡终于好使了 STM32F407 .png
308KB 2015-01-06 22:22
电机控制中的MOSFET和IGBT基础知识.pdf
401KB 2015-04-17 09:27
虚拟串口工具.zip
4.7M 2015-01-27 12:50
西门子PLC上所使用的软件PID程序.zip
1.1M 2015-01-03 21:07
设计原理图.pdf
38KB 2015-04-14 15:12
12864_uc1701.zip
5.6M 2015-05-19 12:00
(中文)使用STM32F2xx 和STM32F4xx 微控制器时如何提高ADC 测量精度.PDF
602KB 2015-01-29 12:59
(感谢QQ群成员-一毛-提供)F4多通道ADC+DMA+UART采集数据.zip
8.5M 2015-07-27 16:39
(电机驱动库官方版4.0)STM32_FOC_SDK_4.0.0.zip
70.8M 2015-05-06 14:45


mx更新内容如下:
Added support of code generation, clock and power consumption calculation for the new part numbers of STM32F7 series.
Management of the dependency and configuration of external I/O, when required by a peripheral
STM32CubeMX can now be installed from a console.
STM32CubeMX supports now a command line mode.
F4更新如下:
Add support of System Workbench for STM32 (SW4STM32) toolchain
Maintenance release to fix known defects, in HAL and Projects

b更新STM32Cubemx软件到4.8.0版本[/b]
------------->文件名:stm32cubemx-4.8.0.zip
(2015.3.24)更新STM32cubeF4驱动库到1.6.0版本
--------------->文件名:stm32cubef4-1.6.0.zip


喜讯: Cube支持F1系列了!
请大家务必更新!

重新上传了!以前那个没法添加后续更新文件,晕死
最近有童鞋新入手stm32cubemx软件,但是不知道怎么安装和更新,尤其是软件自动更新慢如蜗牛,
惨不忍睹,导致很多人放弃了.
在此,分享下官方最新安装包和驱动包,
本帖也会长期更新驱动的更新和官方提供的中文PDF文档下载
希望对童鞋们节省翻墙的时间................
不废话了,上地址,百度网盘

另外,官方提供的示例代码在各芯片的驱动库里面,详情请看下面的帖子
http://www.stm32cube.com/question/17
我已经将下面所有介绍到的文件都共享到上面的地址里面了
大家下载的时候按照下面的介绍文件名选择下载

首先是stm32cubemx的安装程序,最新版本是4.4.0(于2014,11,17更新)
文件名: stm32cubemx-4.4.0.zip

安装mx之后必须按照你要用到的芯片型号选择驱动包下载,
文件名类似: stm32cubef4-1.3.0.zip

无标题.png

下面介绍下安装驱动包的步骤:
在C盘新建一个文件夹,必须英文,也可以不是c盘,随你便
无标题3.png

将你需要安装的驱动包下载后,解压到这个文件夹里面,无需修改任何东西
返回到stm32cubemx软件,找到heip点击 updater setting,在里面选择刚才新建的文件夹

无标题1.png


无标题2.png


无标题22.png

好了,已经安装好了
你可以点击help里面的install new library查看下

无标题4.png


软件和驱动包都安装好了.
下面说下生成程序最好设置的一个地方

无标题45.png

这样,生成程序的时候对应的外设会分别生成.c文件,便于管理,层次更清晰
推荐使用keil4.74版本,前面的下载里面有最新的mdk474下载,里面有个绿化工具
推荐大家购买正版.
keil4.70以上版本可以支持自动补全功能,非常方便,虽然没viral stdio好用,但是也很好了.呵呵
以后慢慢更新官方发布的中文使用文档