打印
[STM32F1]

学习笔记+USB通讯口控制波形发生器(1)

[复制链接]
909|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 dzwwzd6699 于 2019-12-29 17:53 编辑

    USB接口运用广泛,支持热插拔,适合做与上位机的通讯接口。HID 是USB的一个类,HID类驱动是系统自带的,无需安装其他驱动,通用性较强。笔者初次接触STM32 USB接口,参照并在官方例程上进行了修改,可能会有许多错误,欢迎各位大佬指正
    本设计比较简单,stm32f103通过USB接口获取波形参数,然后通过定时器触发DAC,产生特定的波形。
   1.USB通讯配置

USB设备类型选HID类


                  

根据描述符个数更改USBD_CUSTOM_HID_REPORT_DESC_SIZE,避免数组越界报错

   2.DAC、DMA、TIM配置
     STM32F1系列共有 8 个定时器,定时器6和定时器7是基本定时器,只能定时,没有外部 IO,主要用于驱动DAC。定时器2、3、4、5是通用定时器可以定时、输出比较和输入捕捉。定时器1和定时器8是高级定时器,可以定时、输出比较、输入捕捉,还可以有三相电机互补输出信号。本试验采用基本定时器7定时触发唤醒DAC.(8分频)
  


   3.波形的生成
    波形生成主要有两种方法,一种是将电压值写入数组中,定时器定时触发产生相应电压值;另一种是硬件生成特定波形。stm32f1系列可以硬件生成方波(PWM)和三角波,无法生成正弦波。数组法可以用Excel拟合曲线法,将电压值写入Flash,也可以用公式法求得固定步长下电压值并塞进数组中,相比之下公式法灵活性更高,可以实现振幅与周期的可控,但对运算速度要求较高。(函数还未优化,参数写死了,尤其是方波)


   4.程序结构
     stm32f103接受到上位机信号后,进入中断,在中断内改变全局变量myaction的值,主程序不断轮询myaction的值,并调用对应波形的电压值数组,通过定时器定时触发,输出对应电压值进行拟合。

标志位


主循环

      根据官方的指南,stm32向电脑发送数据可以直接调用USBD_CUSTOM_HID_SendReport()的API,接受数据则要在中断函数CUSTOM_HID_OutEvent_FS中完成,故在中断中设置标志位,在主循环内轮询标志位,选择并生成对应波形的数组,后期将会完善中断和波形函数那一块,实现波形可控。还有一个坑是stm32f103c8没有DAC
,暂时还没法测试。



usb3.jpg (134.05 KB )

usb3.jpg

使用特权

评论回复
沙发
mmuuss586| | 2019-12-29 22:02 | 只看该作者

感谢分享

使用特权

评论回复
板凳
xiaoqizi| | 2020-1-17 16:51 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
地板
wakayi| | 2020-1-17 16:54 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
5
wowu| | 2020-1-17 16:55 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

44

帖子

0

粉丝