-
已经从最新的例子里面看到辣w
感谢~
看了例程发现ADC的中断应该是不停进入的,然后在里面Poll比较器结果改变的flag(CMP_IF),这样会大量的CPU时间浪费在中断上,并不是>真
-
窝错惹QAQ 咱不会编辑帖子肿么破QAQ
还是超时之后就不能修改惹
-
现在STM32F030 042 051价格已经很便宜了,GD32系列更是,有模拟比较器 USB DMA DAC等51单片机普遍缺乏的功能
更大的RAM ROM可以让设计更放松,同时也允许上RTOS进行更复杂的任务,所以窝感觉以后8位机的使用空间会被大大压缩
话又说回来了,精通51的上手Arm m0还是要点时间,毕竟新的概念还是挺多的,不过掌握之后就是如鱼得水23333333333333333333333333
-
这太情怀了
-
建议用wireshark进行抓包看看是什么情况
stm32上 是USB包的Set_Address处理的地方加一个点LED的操作 看看有没有到这一步
如果有说明可能是后面程序的问题,没有就说明主机没收到前半段的设备描述符,就比较纠结了
-
https://github.com/rikka0w0/CH55x_USB_CDC
窝这个USB_CDC的例子里面有一套Blinkinlabs的sdcc头文件
窝自己加了ch554_platform.h,可以让代码做到SDCC和Keil C51都能编译
注意SDCC和USB包是小端而Keil和SCSI包是大端
ch554_conf.c和ch554_conf.h是初始化和配置时钟之类的,代替了官方库
-
1. 不需要.A51文件
2. 可以去pdf看一下时钟连接
没记错应该是cpu速度默认4分配 改一个寄存器可以做到全速24MHz工作
-
https://github.com/rikka0w0/CH55x_USB_CDC
窝这个USB_CDC的例子里面有一套Blinkinlabs的sdcc头文件
窝自己加了ch554_platform.h,可以让代码做到SDCC和Keil C51都能编译
注意SDCC和USB包是小端而Keil和SCSI包是大端
ch554_conf.c和ch554_conf.h是初始化和配置时钟之类的,代替了官方库
-
这个里面
https://github.com/Blinkinlabs/ch554_sdcc
是SDCC的头文件,已经处理好了
注意xdata idata _at_ sbit sfr等关键字用法不一样
我这里有ch554_platform.h,包含一些宏,可以做到SDCC和Keil C51编译器都兼容
https://github.com/rikka0w0/CH55x_USB_CDC
使用的时候每个文件都引用ch554_platform.h就好了,ch554_conf.c是初始化单片机用的代码 可以修改
上面链接是个USB_CDC的例子
-
本帖最后由 Rikka0w0 于 2018-4-13 21:32 编辑
根据楼上的说法 在中断刚开始的地方加入
GPIO_IE &= ~bIE_IO_EDGE;复制代码
后问题解决,但是有个疑问就是,数据手册原文是
bIE_IO_EDGE 该位为1 选择边沿中断模式,GPIO引脚输入有效边沿时产生
中断标志bIO_INT_ACT 并请求中断,该中断标志无法软件清
零,只能在复位时或电平中断模式下或进入相应的中断服务
程序时被自动清零复制代码
注意是 或!进入相应的中断服务程序时被自动清零
现在更新下我的理解
1. GPIO_IE = bIE_IO_EDGE | bIE_P1_5_LO; IE_GPIO = 1;配置P1.5中断为下降沿模式
2. 当P1.5跳变为低电平时触发中断
3. 在中断里GPIO_IE &= ~bIE_IO_EDGE;将中断改为低电平模式,此时如果IO脚是低电平则bIO_INT_ACT=1,高电平会让bIO_INT_ACT变成0,相当于硬件自动清零了
4. 然后在中断里程序IE_GPIO=0;关闭GPIO下降沿检测
5. 下次需要捕获下降沿的时候再用1的方法开启下降沿捕获
-
这边也来贡献一个Demo吧,是一个USB U盘+键盘+自定义HID设备的
U盘用EEPROM做储存介质,大小这里是64kB,可以自行更换材质
而且U盘部分修复了很多U盘demo无法弹出的bug
代码比较结构化 也有注释 对低级的寄存器操作有一些包装的哦
github.com/rikka0w0/CH55x_USB_CompositeDevice
求点赞