如何用cubeMxmultiwfn怎么生成cube一个STM32F103C8的虚拟串口工程

1700人阅读
工具调试笔记(21)
直接上ST的官网下载STM32CubeMX安装
单片机:STM32F103C8T6 带外部8MHz晶振
目的:利用Timer和使LED按照1Hz的频率闪烁。
在此方面学霸级人物的指引下学习了,并写此文章记录,以防忘记。
出现如下界面,中央就是这个封装的引脚图:
接下来开始配置
1. 设置外部晶振接口在PD0和PD1
单机想要配置的引脚,出现选择菜单。
如图选择外部时钟晶振。一定要选!如果不选的话就会利用内部时钟,会造成只能下载不能DEBUG的悲剧后果(某人排查了一下午,发现的这个原因)。
3.配置GPIO输出
3.配置Timer
跳出一个小窗口
然后进行下一步设置:
timer中断时间间隔的设置
这样设置的总时长是0.5S,任意一个数除以10总时长都会变成0.05S。
NVIC是管理中断的模块,如果需要使用中断的话就需要在这个模块勾选相应的中断不然,在code generate之后没有中断相关的库和代码(教训。。。。)
工程名字,路径和要生成的代码的环境,我用keil5,所以选MDK-ARM V5.
加在user code start 和user code end 之间,只有加在这种地方的code,之后跟新引脚配置之后才不会被清除!
在中断函数文件中:
选择正确的下载方式:
插上下载器和STM32的板子,DEBUG,下载烧录,run!
板子上的灯成功按照1Hz的频率闪烁!★,°:.☆( ̄▽ ̄)/$:.°★ 。
底层小白的STM32之路第一步。成功记录并且复习所学知识!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8052次
排名:千里之外
原创:24篇
(1)(2)(3)(1)(3)(5)(5)(4)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'【STM32CubeF4教程】第三期:使用STM32CubeMX生成用于STM32-V5开发板的USART工程中断方式|STM32F407 - 安富莱电子论坛 - Powered by phpwind
查看完整版本: [--
【STM32CubeF4教程】第三期:使用STM32CubeMX生成用于STM32-V5开发板的USART工程中断方式
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&第三期:使用STM32CubeMX生成用于STM32-V5开发板的USART工程中断方式本期教程使用STM32CubeMX生成可用于STM32-V5开发板的USART1中断方式的工程,通过本期教程让大家对STM32CubeMX设置外设中断有个了解。&& 1.1&&STM32CubeMX生成USART工程中断方式配置&& 1.2&&USART工程验证&& 1.3&&完整工程下载*******************************************************************************************************************************************1.1&&STM32CubeMX生成USART工程中断方式配置&&&&&&关于使用STM32CubeMX生成USART工程的方法已经在第二期教程中讲解了,这里就不再赘述了,重点说一下中断配置。第1步:点击USART1按钮[attachment=6740]然后使能USART中断。[attachment=6741]第2步:设置NVIC的优先级分组以及抢占优先级和子优先级,首先点击选择NVIC按钮[attachment=6742]关于NVIC的优先级分组,抢占优先级和子优先级,大家可以看我们STM32-V5开发板用户手册的第12章。[attachment=6745]设置完记得点击OK进行保存。通过上面两部USART的中断方式就算设置完了,剩下就是生产相应的工程,具体方法参考第2期教程。1.2&&USART工程验证&&&&&& STM32CubeMX生成的工程如下:[attachment=6746]生成工程后,用户只需添加简单的代码就可以通过开发板上面的串口打印数据,这里我们添加几行简单的代码实现每100ms发送字符串&&****************************************************************************************************#include &stm32f4xx_hal.h&#include &usart.h&#include &gpio.h&#define RXBUFFERSIZE&&20&&&&&&&&&&&&&&&&&&&&&&&&&&&&/* 以下三行用户添加 */extern UART_HandleTypeDef huart1;uint8_t aTxBuffer[] = &\r\n&;/* Private function prototypes -----------------------------------------------*/void SystemClock_Config(void);int main(void){&&/* MCU Configuration----------------------------------------------------------*/&&/* Reset of all peripherals, Initializes the Flash interface and the Systick. */&&HAL_Init();&&/* Configure the system clock */&&SystemClock_Config();&&/* Initialize all configured peripherals */&&MX_GPIO_Init();&&MX_USART1_UART_Init();&&while (1)&&{&&&&&&HAL_UART_Transmit_IT(&huart1, aTxBuffer, RXBUFFERSIZE);&&&&/* 以下两行用户添加 */&&&&&&HAL_Delay(100);&&&&}}****************************************************************************************************添加完后,配置下工程下载选项就可以将代码下载到STM32-V5开发板运行,需要配置的位置有如下几项:[attachment=6747][attachment=6748]配置好后,千万记得点击确定,这样就可以点击MDK上面的load图标下载到开发板。[attachment=6749] 下载后,复位开发板,然后USB转串口线连接PC机和开发板。PC机上运行SecureCRT软件,波特率设置为 115200bps,无硬件流控。从PC机的软件界面观察程序执行结果,结果如下:[attachment=6750] 1.3 完整工程下载[attachment=6751]
已经整理完,发布。
为啥接收的时候不进中断呀,嘻嘻。咋解决呀?
:为啥接收的时候不进中断呀,嘻嘻。咋解决呀? ( 13:21) 可以进中断的,您遇到的是怎么个情况,也是用的STM32CubeF4吗。
上周六拿到板子,因为有事,今天才开箱,用Cube玩了下,也是进不了中断,后来在使用HAL_UART_Receive_IT以后就可以进了,发送也是,中断方式用HAL_UART_Transmit_IT。瞎捣鼓,第一次接触STM32,坛主能帮忙分析下什么原因不。/**&&* @brief&&Receives an amount of data in non blocking mode &&* @param&&huart: pointer to a UART_HandleTypeDef structure that contains&&*&&&&&&&&&&&&&&&&the configuration information for the specified UART module.&&* @param&&pData: Pointer to data buffer&&* @param&&Size: Amount of data to be received&&* @retval HAL status&&*/HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size){&&uint32_t tmp = 0;&&&&tmp = huart-&S&&&&if((tmp == HAL_UART_STATE_READY) || (tmp == HAL_UART_STATE_BUSY_TX))&&{&&&&if((pData == NULL ) || (Size == 0)) &&&&{&&&&&&return HAL_ERROR;&&&&}&&&&&&&&/* Process Locked */&&&&__HAL_LOCK(huart);&&&&&&&&huart-&pRxBuffPtr = pD&&&&huart-&RxXferSize = S&&&&huart-&RxXferCount = S&&&&&&&&huart-&ErrorCode = HAL_UART_ERROR_NONE;&&&&/* Check if a transmit process is ongoing or not */&&&&if(huart-&State == HAL_UART_STATE_BUSY_TX) &&&&{&&&&&&huart-&State = HAL_UART_STATE_BUSY_TX_RX;&&&&}&&&&else&&&&{&&&&&&huart-&State = HAL_UART_STATE_BUSY_RX;&&&&}&&&&&&&&/* Enable the UART Parity Error Interrupt */&&&&__HAL_UART_ENABLE_IT(huart, UART_IT_PE);&&&&&&&&/* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */&&&&__HAL_UART_ENABLE_IT(huart, UART_IT_ERR);&&&&&&&&/* Process Unlocked */&&&&__HAL_UNLOCK(huart);&&&&&&&&/* Enable the UART Data Register not empty Interrupt */&&&&__HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);&&&&&&&&return HAL_OK;&&}&&else&&{&&&&return HAL_BUSY; &&}}
:上周六拿到板子,因为有事,今天才开箱,用Cube玩了下,也是进不了中断,后来在使用HAL_UART_Receive_IT以后就可以进了,发送也是,中断方式用HAL_UART_Transmit_IT。瞎捣鼓,第一次接触STM32,坛主能帮忙分析下什么原因不。/**  * @brief  Receives an amo .. ( 20:20) 第一接触,建议不要搞这个,这个东西还不适合初学者(这么说是因为资料太少了),我在论坛简单的搞了几期也是方便想入门CubeF4的人。这个我也研究的不深,你再研究研究,网上能查的资料太少了,不好帮你,见谅。
查看完整版本: [--
Powered by
Time 0.047565 second(s),query:2 Gzip enabled【实战经验】通过STM32CubeMX生成HID双向通讯工程 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 2320|回复: 8
【实战经验】通过STM32CubeMX生成HID双向通讯工程
在线时间1486 小时
ST金币9937496
主题帖子好友
通过STM32CubeMX生成HID双向通讯工程
客户在做USB通讯的时候,基本的需求就是发送某些数据到USB host端,同时接收一些数据从USB Host端,那么如何快速的建立一个工程并验证数据是否正确呢?下边我们就结合STM32F072的评估板(其他的STM32xx系列的实现方式都是类似的)来快速实现一个简单的数据收发实验。
USB Host软件
PC端软件使用ST免费提供的Usb Hid Demonstrator。这个软件可以在ST官网上免费下载到。连接地址:STSW-STM32084,此软件调用的是windows标准的HID类驱动,所以无需安装任何驱动程序及可运行。
下载安装完这个软件之后,我们就可以开始开发STM32的USB 从机程序了。
首先,打开STM32CubeMX,新建工程,选择STM32F072B-DISCOVERY开发板。
其次,在Pinout选项中,开打USB的device功能。
并在Middleware中选择开启class for IP中的 custom Human Interface Device(HID).
点击“保存”后直接生成工程。我们这里以生成IAR工程为例,项目名叫做HID。
这样我们的工程就基本成功了,但是还缺少最最关键的一步,就是USB主机和从机的通讯“协议”,这个协议在那里实现呢?因为我们Host端软件已经是Usb Hid Demonstrator,那么这边的协议就已经固定了(其实在实际的开发中大多是主机端和从机相互沟通后,软件自行修改的),从机只需要对应这套协议即可。
将如下代码复制,替换掉usbd_custom_hid_if.c文件中的同名数组。
注意:这里一定要覆盖“同名”数组,千万不要覆盖错了。
之后将如下代码复制到usbd_custom_hid_if_if.h中。
最后在usbd_conf.h文件中将USBD_CUSTOM_HID_REPORT_DESC_SIZE的定义值修改为163(默认值是2)
为什么这样修改呢? 简单说一下其中关键值的含义。这个HID 的报文描述符其实定义了8个部分(条目)的功能定义,分为LED1,LED2,LED3,LED4,按键输入,篡改按键输入和ADC输入。每一个部分基本的格式都是固定的。以LED1为例(其他条目可自行对照文档解析):
0x85, LED1_REPORT_ID, 含义是这个功能的ID号是LED1_REPORT_ID(宏定义为0x01)
这个ID号是每次报文发送的时候最先被发送出去的(USB都是LSB)字节,之后跟着的才是我们实际有效的数据/指令,到底是数据还是指令,就看你的应用程序如何去解析这个数据了。
0x09, 0x01, 这个功能序号为1,后边的序号依次递加,没什么好说的
0x15, 0x00, 这个是规定逻辑最小值为0
0x25, 0x01, 这个是规定逻辑最大值为1
上边的这两条语句规定了跟在报文ID后边的数据范围,最大值是1,最小值是0.(因为我们的LED也就只有灭和亮两种状态)
0x75, 0x08, 这个是报文的大小为8,只要别写错就行了
0x95, LED1_REPORT_COUNT, 这个是说下边有LED1_REPORT_COUNT (宏定义为1)个项目会被添加,即这个功能的数量是1个
0xB1, 0x82, 这个是规定能够发送给从机设备的数据信息
0x91, 0x82, 这个规定了这个功能的数据方向是输出(USB的方向都是针对主机来说的)
总结一下,通过这个报文描述符,我们就告诉了主机,在HID中有一个功能ID为1的功能,其方向是从主机到从机,每次发送1个有效数据(前边的ID是都要含有的),这个数据可以是0或者是1.
关于HID 报文描述符的详细信息,您可以在下边的网址下载一篇叫做《Device Class Definition for HID》的文档来参考。
这样基本的程序框架就已经成功了。此时我们可以先编译一下,看看是否有任何遗漏的或者笔误。如果编译是正确的,那么我们就可以先下载到硬件开发板上,连接到PC端,看看是否可以枚举出设备。如果您前边的修改都是正确的,那么在PC的设备管理器中会看到如下图所示的内容。
注意:开发板上有两个一模一样的Mini USB接口,一个是USB USER,另 一个是USB ST-link,下载代码的时候用USB ST-Link,连接电脑运行程序的时候要用USB USER。
此时我们的USB枚举就完成了,这个是USB通讯的关键步骤,之后的应用通讯内容都是通过这个枚举工程来进行“规划”的。
就类似串口通讯,我们首先做一个数据的发送工作。
在Main.c文件中,我们在while(1)的主循环中增加我们的发送函数,主要就是调用发送报文的API:USBD_CUSTOM_HID_SendReport()
编译后下载到MCU内,连接上位机软件即可看到如下所示的进度条在不断的增长。
这个就是我们上传到的数据在上位机的图形显示,你也可以看Input/output transfer里的数据变化。
这样看起来是不是更像是串口调试助手了?嘿嘿 本来机制就差不多的。
MCU的USB数据是如何接收的呢?是不调用一个类似于串口接收的API呢?
不是的!USB的数据接收都是在中断中完成的,在新建的工程中,我们在函数CUSTOM_HID_OutEvent_FS内增加如下代码。
编译之后下载到MCU内,通过USB USER连接到PC端,打开Usb Hid Demonstrator,我们可以通过勾选右下角的图形界面来实现控制开发板上的LED电量或者关闭。
当然,这个是通过图像化的界面来进行控制,你也可以通过Input/output transfer中的写入对话框来完成这个操作。注意,写入的第一个字节是ID,表示你想控制的是哪个LED;第二个字节是0或者是1,表示你想让这个LDE的状态变成灭还是亮。
总结: 本范例程序是为了快速实现USB 从机设备与主句设备双向通讯目的,其初始化代码是用STM32CubeMX来生成的,大大降低了工程师开发USB设备的难度(尤其是是入门阶段的难度)。从这个工程的基础上,工程师可以比较方便的建立好框架工程并,对其中的代码进行研究,进而移植或增加自己的应用代码。
文档和代码下载地址:
(37.22 KB, 下载次数: 0)
(37.78 KB, 下载次数: 0)
(52.58 KB, 下载次数: 0)
(34.56 KB, 下载次数: 0)
(38.14 KB, 下载次数: 0)
文档和代码下载地址:
实战经验汇总:
在线时间5 小时
主题帖子好友
新手上路, 积分 46, 距离下一级还需 4 积分
新手上路, 积分 46, 距离下一级还需 4 积分
谢谢楼主!学习了
在线时间82 小时
主题帖子好友
金牌会员, 积分 1340, 距离下一级还需 3660 积分
金牌会员, 积分 1340, 距离下一级还需 3660 积分
mark,谢谢楼主的资料分享
在线时间15 小时
主题帖子好友
中级会员, 积分 257, 距离下一级还需 243 积分
中级会员, 积分 257, 距离下一级还需 243 积分
谢谢楼主!学习了
在线时间598 小时
主题帖子好友
在线时间7 小时
主题帖子好友
初级会员, 积分 73, 距离下一级还需 127 积分
初级会员, 积分 73, 距离下一级还需 127 积分
很好的例程~谢谢
在线时间192 小时
ST金币2134
主题帖子好友
金牌会员, 积分 3562, 距离下一级还需 1438 积分
金牌会员, 积分 3562, 距离下一级还需 1438 积分
宝贵的实战经验
在线时间68 小时
ST金币1780
主题帖子好友
金牌会员, 积分 1155, 距离下一级还需 3845 积分
金牌会员, 积分 1155, 距离下一级还需 3845 积分
在线时间61 小时
主题帖子好友
高级会员, 积分 962, 距离下一级还需 38 积分
高级会员, 积分 962, 距离下一级还需 38 积分
本帖最后由 tanr 于
11:11 编辑
如果不在main函数中的while中调用USBD_CUSTOM_HID_SendReport()这个函数,为什么就不能继续使用HID了,有大神为我指点迷津不
站长推荐 /2
,同时大家也可以下载电子版学习
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by[教程]使用STM32CubeMX生成MCU工程,简单3步连上云端 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 1979|回复: 20
[教程]使用STM32CubeMX生成MCU工程,简单3步连上云端
在线时间661 小时
ST金币2761
主题帖子好友
& &&&降低开发门槛一直是我们追求的目标,目前机智云自助生成的STM32方案工程采用的是STM32的标准库函数(又称STD库,对于STM32F103系列最新版本为V3.5),值得提出的是ST已不再更新STD标准库,主推HAL库,新出的F7,L4系列已不再支持STD库;HAL库配合强大的PC端图形化配置工具STM32CubeMX,能够帮助用户大大简化MCU开发,降低门槛。本篇教程将教会大家如何使用STM32CubeMX图形化配置工具生成MCU工程,然后只需编写几个简单的接口,即可将机智云自助生成的STM32方案工程里面的设备协议移植过来,真正实现全程图形化配置,傻瓜式开发,这样既可十分方便的将其它型号STM32微控制器连上机智云,开发智能产品。本文的读者对象需要掌握的是:1.& & 知道如何利用机智云自助开发生成MCU工程;2.& & 知道如何利用STM32CubeMX配置外设,生成STM32工程;3.& & 其它如开发工具Keil,串口调试助手,STLINK,STM32CubeMX等软件的安装使用教程这里不会赘述,新手可前往机智云开发者社区参考前期教程;本文使用的硬件为:1.STM32 Nucleo-F410RB评估板;2.机智云Gokit V2.3功能扩展板(WIFI模块是ESP8266-12F);3.USB转TTL模块一个,串口调试用;软件工具为:1.STM32CubeMX V4.16.1;2.机智云自助开发平台;3.串口调试助手;4 . Keil V5.21.1.0;
先来张全家福:
Nucleo-64板系统图.png (1.36 MB, 下载次数: 0)
13:28 上传
Nucleo-64板正面改动.png (951.35 KB, 下载次数: 0)
13:28 上传
演示视频:优酷:腾讯:
完整图文PDF教程下载:
(9 MB, 下载次数: 843)
13:33 上传
点击文件名下载附件
在线时间153 小时
ST金币1913
主题帖子好友
金牌会员, 积分 3104, 距离下一级还需 1896 积分
金牌会员, 积分 3104, 距离下一级还需 1896 积分
学习了,谢谢
在线时间598 小时
主题帖子好友
顶一下,,,,,,,,
(21.38 KB, 下载次数: 0)
15:27 上传
在线时间661 小时
ST金币2761
主题帖子好友
顶一下,,,,,,,,
在线时间598 小时
主题帖子好友
合作愉快,,,
(21.38 KB, 下载次数: 0)
16:17 上传
在线时间22 小时
主题帖子好友
中级会员, 积分 414, 距离下一级还需 86 积分
中级会员, 积分 414, 距离下一级还需 86 积分
不错& &mark
在线时间1058 小时
主题帖子好友
不错!下载学习!
在线时间206 小时
ST金币1535
主题帖子好友
金牌会员, 积分 3322, 距离下一级还需 1678 积分
金牌会员, 积分 3322, 距离下一级还需 1678 积分
学习了,谢谢分享
在线时间24 小时
主题帖子好友
中级会员, 积分 372, 距离下一级还需 128 积分
中级会员, 积分 372, 距离下一级还需 128 积分
学习学习学习。
在线时间175 小时
ST金币1208
主题帖子好友
金牌会员, 积分 2686, 距离下一级还需 2314 积分
金牌会员, 积分 2686, 距离下一级还需 2314 积分
站长推荐 /2
,同时大家也可以下载电子版学习
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
今天终于调通了,虽然只是PC电脑上接收到了数据.......(发送的还没研究)
先弄上来让大家知道怎么配置和大体程序的流程(我也没多研究).....
至于配置,我先前一个帖子已经贴图了....
这里再写一次
Pinout界面中修改:
开启USB_OTG_FS模式下的Device_Only,其他不选
middleWare里面的USB_DEVICE中的Class For FS IP选择Communication Device Class (Virtual Port Com)
时钟配置界面:8M外部晶振,设置系统168M,Apb1分频4,APB2分频2
Configuration界面中:
GPIO设置PD12,13,14,15输出上拉,中速
usb的GPIO的DM和DP均为AF,DM无上啦,DP上拉,高速模式(High)
开启中断优先组GRoup4
NVIC中断开启usb on the Go FS Global interrupt 中断1,0
USB_FS configuration 设置 speed为Full , ENDpoint 0 max packet size为64bytes
低功耗不使能, vbus不使能.....
usb_device configuration中的Parameter setting设置
ok,生成代码
GPIO方面的配置图
生成之后,我用的事keil 编译的, 要去修改启动文件里面一个代码
打开工程的启动文件 startup_stm32f407xx.s
将里面的 Heap_Size EQU 0x
改成 Heap_Size EQU 0x
或者改成Heap_Size EQU 0x
其中1500是官方那个演示程序的设置.
再次打开main.c文件
添加头文件
#include &usbd_cdc.h&
算了直接上main.c里面的全部代码,其他的文件都不用修改
/[i] Includes ------------------------------------------------------------------[/i]/
#include &stm32f4xx_hal.h&
#include &usb_device.h&
#include &gpio.h&
/[i] USER CODE BEGIN Includes [/i]/
#include &usbd_cdc.h&
/[i] USER CODE END Includes [/i]/
/[i] Private variables ---------------------------------------------------------[/i]/
/[i] USER CODE BEGIN PV [/i]/
/[i] USER CODE END PV [/i]/
/[i] Private function prototypes -----------------------------------------------[/i]/
void SystemClock_Config(void);
/[i] USER CODE BEGIN PFP [/i]/
/[i] USER CODE END PFP [/i]/
/[i] USER CODE BEGIN 0 [/i]/
/[i] USER CODE END 0 [/i]/
int main(void)
/[i] USER CODE BEGIN 1 [/i]/
uint8_t UserTxBuffer55 = 0x55;
/[i] USER CODE END 1 [/i]/
/[i] MCU Configuration----------------------------------------------------------[/i]/
/[i] Reset of all peripherals, Initializes the Flash interface and the Systick. [/i]/
HAL_Init();
/[i] Configure the system clock [/i]/
SystemClock_Config();
/[i] Initialize all configured peripherals [/i]/
MX_GPIO_Init();
MX_USB_DEVICE_Init();
/[i] USER CODE BEGIN 2 [/i]/
/[i] USER CODE END 2 [/i]/
/[i] USER CODE BEGIN 3 [/i]/
/[i] Infinite loop [/i]/
if(mmss&=500)
HAL_GPIO_TogglePin (GPIOD,GPIO_PIN_12);
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, (uint8_t*)&UserTxBuffer55, 1);
USBD_CDC_TransmitPacket(&hUsbDeviceFS);
/[i] USER CODE END 3 [/i]/
/** System Clock Configuration
void SystemClock_Config(void)
RCC_OscInitTypeDef RCC_OscInitS
RCC_ClkInitTypeDef RCC_ClkInitS
__PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
/[i] USER CODE BEGIN 4 [/i]/
void HAL_SYSTICK_Callback(void)
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_SYSTICK_Callback could be implemented in the user file
/[i] USER CODE END 4 [/i]/
#ifdef USE_FULL_ASSERT
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
void assert_failed(uint8_t* file, uint32_t line)
/[i] USER CODE BEGIN 6 [/i]/
/* User can add his own implementation to report the file name and line number,
ex: printf(&Wrong parameters value: file %s on line %d\r\n&, file, line) */
/[i] USER CODE END 6 [/i]/
好了,编译烧录,打开串口调试助手
**注意啊,串口调试助手里面,只需要选择相应的串口就可以了......其他的什么波特率啊,位数啊,都没用的..........
咱是usb虚拟的,没定义这个....不信你可以自己试试**
晚上回去测试接收然后原数据返回.....................
占楼广告.....................
期待楼猪速更...................
发现生成的代码里面有几个问题:
usbd_cdc_if.c文件里面的最后一个函数
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
uint8_t result = USBD_OK;
/[i] USER CODE BEGIN 8 [/i]/
USBD_CDC_SetTxBuffer(hUsbDevice_0, [b]Buf[/b], Len);
result = USBD_CDC_TransmitPacket(hUsbDevice_0);
/[i] USER CODE END 8 [/i]/
应该改成上面的,这个应该是整合了下发送函数,毕竟每次发送都要用到.但是他原来里面粗体部分用的是UserTxBufferFS[],这就说不通了......导致变量Puf木有屁用了...
然后以后的main.c中的main就可以直接调用这个函数了,
额,调用前,先声明下
extern uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len);
测试的话,随便定义一个uint8_t datausb = {0x77,0x88,0x99,0x11,0x22,0x33,0x55};
发送用 CDC_Transmit_FS((uint8_t *)&datausb ,7);
下面测试接收数据.要添加个东西...
打开usbd_cdc_if.c文件里面的倒数第二个函数
static int8_t CDC_Receive_FS (uint8_t[i] Buf, uint32_t [/i]Len)
/[i] USER CODE BEGIN 7 [/i]/
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, (uint8_t *)&UserRxBufferFS);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
return (USBD_OK);
/[i] USER CODE END 7 [/i]/
不改的话,接收一次数据可以,第二次串口调试助手就会死机..............
我main函数中这样写
if(addtime &=500)
addtime = 0;
HAL_GPIO_TogglePin (GPIOD,GPIO_PIN_12);
UsbSendData (&datausb ,1);
CDC_Transmit_FS(UserRxBufferFS ,7);
每次500ms发送一次接收到的数据回去....
我每次发送接收到的头7个数据...
图中,我发送16进制数 55
44 两个字节......
返回的是16进制数
55 44 C1 2C 60 18 7C 七个字节.....
这是我随便发送后,再次发送55 44两个字节的结果...
数据没清零.......说明程序还是有问题.........
明天再改改
多次试验发现,有时候上电我设置的系统正常情况下必闪的led没闪烁,不知道什么原因,这样貌似是系统死在了哪里......导致usb也发送不到数据和接收....
还有就是如上面代码的写法,加入接收5个或者更少的数据,但是发送大于此数量那么接收还是正确的5数,但是紧接着就是两个错误的数据.....难道是CRC校验?但是我没开啊,而且也貌似也不是校验啊........
难道用虚拟串口必须用特征码筛选有用信息?
谁遇到过这种问题
驱动包里有例子,生成的还不能直接用
这么说可以直接USB下载程序了?
可以把接收的代码贴上来吗?楼主
时钟配置一直不对啊
怎么没有下文了?
最后的main()函数的最后一行CDC_Transmit_FS(UserRxBufferFS,7)是不是写错啦,函数是Transmit,参数却是RxBuffer,应该是CDC_Receive_FS(UserRxBufferFS,7)吧
不知道楼主有没有试过F10X、F30X系列的芯片测试。按照教程测试了429,PC可以发现虚拟串口,可是用了个302的开发板(stm32f302r8t6),USB的配置就缩水了,插上后一点反应都没。难道还得手动上拉DP? 部分配置如下图 缺少: NVIC中断开启usb on the Go FS Global interrupt 中断1.0 ;vbus 设置。
在DP脚添加了一个上拉电阻后终于可以枚举 stm32f302r8t6 VCP了。第一步 check。
我的开发板是STM3240G-EVAL,用CUBEMX设置了很多次,电脑上始终有个黄色感叹号,不能正常使用,用demo程序就没有问题
开启中断优先组GRoup4是不是默认的?我的怎么改不了?还有NVIC中断开启usb on the Go FS Global interrupt 中断1,0什么意思?貌似只有是能usb on the Go FS Global interrupt 中断啊!
大家好,我将f429例程的CDC代码移植到407中,电脑设备管理器中端口显示出端口号,但有个黄色感叹号,双击感叹号,显示“设备无法启动,代码10”,移植到407需要改哪些地方额,大家遇到过这个问题吗?谢谢
借楼提示下,楼主的方法少最后会出现黄色惊叹号,串口无法工作,根本原因是cube给的堆空间不够,按照上图中设置即可解决。
感谢楼上的回答,困扰已久的问题终于解决了,对着这个黄色感叹号都看了2天了
是什么原因有黄色叹号?
接收数据时,你不知道电脑到底发的数据有多少个字节时,要怎么办!?在哪里知道需要接收的字节数?
谢谢分享!!!!!!!!!
要回复问题请先或
最新活动: 4 天前
浏览: 28892
关注: 63 人

我要回帖

更多关于 c 代码生成cube 的文章

 

随机推荐