历史上的今天
今天是:2025年03月18日(星期二)
2019年03月18日 | STM32f103c8t6作USBCDC的尝试
2019-03-18 来源:eefocus
闲着无聊就倒腾stm32,实验室资源太多也搞不完,前些天搞了一点dsp,fpga,发现这些芯片难免有点无聊,于是又回来搞stm32的东西。倒腾了一天,下午先是弄了个FreeRTOS的例程,看了一点资料,发现一下没那么好上手,于是下午上完课以后就开始折腾USB,一晚上,搞了个USB的CDC。
本来是想用USB做个模拟串口控制led灯的,后来搞了一下没成功,可能是因为USB进了中断,也就懒得深究,直接就放弃led了,就直接发送接收数据,拿串口助手调试。
也废话少说,直接贴代码
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_hal.h"
#include "usb_device.h"
#include "gpio.h"
/* USER CODE BEGIN Includes */
#include "usbd_cdc_if.h"
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
char My_Txbuffer[]={"First USB Deviece by Versemonger\n"};
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USB_DEVICE_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
CDC_Transmit_FS((uint8_t*)My_Txbuffer,sizeof My_Txbuffer);
HAL_Delay(1000);
}
/* USER CODE END 3 */
}
这是主函数部分,每隔一秒发送My_Txbuffer中的内容到串口,发送倒没什么问题,然后就是发送部分,在usbd_cdc_if.c里找到这个函数CDC_Receive_FS,然后作如下修改
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
char LED[]={"hi"};
char Welcome[] = {"Really frustrating, why only four letters?!\n"};
USBD_CDC_SetRxBuffer(&hUsbDeviceFS,Buf);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
if(strcmp(Buf,LED)==0)
{
CDC_Transmit_FS((uint8_t*)&Welcome,sizeof(Welcome));
}
return (USBD_OK);
/* USER CODE END 6 */
}
大概功能就是当收到hi时回复一串,这里通过调用 USBD_CDC_SetRxBuffer();函数可以更改rx buffer ,可以自己定义,也可以用cubemx生成时定义好了的一个buffer。
具体程序编写的时候,参照了很多这篇文章STM32CubeMX系列教程25:USB Device
过两天继续玩FreeRTOS吧,平时也懒得码字,最近又期末了,还是有点烦。辉光钟也差一点点没焊,辉光钟的程序还是3.5.0版本写的,回头有空传上来。
史海拾趣
|
RP2040-LCD-1.28板子收到了,感谢EEWorld和微雪电子提供的测评机会。 1 开发板介绍 RP2040-LCD-1.28是一款Waveshare设计的高性能的微控制器开发板, 微控制器芯片为Raspberry Pi研发的RP2040,搭载了双核 ARM Cortex M0 + 处理器,运行频率高 ...… 查看全部问答> |
|
行空板目前是符合大势所趋。使用了python的方式进行编程,同时可以控制外设进行工作。如果对其不是很熟悉的话我们还可以只用图形化编程工具,Mind+进行学习。 首先还是要安装应用的,然后我们进去其python模式下。就可以看到我们匹配 ...… 查看全部问答> |
|
本书介绍了变换器的动态建模以及控制电路设计的方法, 介绍了各种变换器拓扑的动态特性, 以及不同的控制方法和不同工作模式对变换器动态特性的影响。 本书内容丰富、 实用性强, 通过大量开关变换器电路实验, 揭示了各种开关变换器和控制方法的特 ...… 查看全部问答> |
|
完了完了,完成不了了,STM32F103产生1us~80us脉宽的方波,是不是不行啊 STM32F103产生1us~80us脉宽的方波,是不是不行啊,这个是不是用CPLD或者是FPGA更好 … 查看全部问答> |
|
其实我在体验这个系统的时候就猜到了这个系统除了python肯定也是能跑QT的。 因为其做的是Debian系统,有了系统我们安装QT就是非常的简单了。 安装QT前还是把我们的源更换下。 # 默认注释了源码镜像以提 ...… 查看全部问答> |
|
【行空板 Python编程学习主控板】基于行空板的便携式果汁光谱分析仪 本帖最后由 HonestQiao 于 2022-11-21 10:53 编辑 目录: 一、想法起源 二、硬件材料 三、准备工作 四、原理图与实物连线 五、逻辑设计与代码编写 六、实测步骤 七、总结 八、花絮 一、想法起源 最近在行 ...… 查看全部问答> |
|
在刚过去的十月,智能家居产业发生了一件里程碑事件。 由 550 家科技公司组成并致力于开发物联网开放标准的国际组织 CSA 连接标准联盟在十月初宣布,Matter 1.0 技术规范正式发布,认证程序同时开放。自此以后,来自物联网生态各个环节的联 ...… 查看全部问答> |
|
智能家居的协议标准有很多,Zigbee,Thread,6LowPan,Wifi,Z-wave,Bluetooth Mesh等等。在过去十年,没有一个协议标准能一统智能家居低功耗局域网,也没有一个协议标准能使得不同厂家的产品真正做到互联互通。纵观2010-2020的十年,是国内短距离 ...… 查看全部问答> |




