问答

汇集网友智慧,解决技术难题

32021724

TA的家园币:211  

  • 串口通信接收2个以上字节出乱码

    voidUSART2_ISR(void)interrupt8using1{unsignedcharredata;unsignedchari=0;RW485=LOW;if(S2CON&1){var0=0;redata=S2BUF;var=redata;var+=var0;combuf[compointer++]=redata;if((S2CON&0x04)==P){buf[0]=0x21;buf[1]=0x22;SendStr232(2);}S2CON&=(~1);}}代码如上,串口调试助手发送1个字节正常,发送2个以上收到的是乱码

    MUC 单片机

    2023-05-08 2
  • STM32的网口DMA是否只能从RAM中提取数据

    本帖最后由32021724于2023-2-1317:45编辑用stm32cube生成了一个基于stm32f407Vet6和lwip的httpserver的例程,试了试工程的ping通没问题,单纯手动新建tcp和udp通信也没问题,但是httpd部分网页打不开经过一通搜索查找跟踪debug,发现httpd部分80端口tcp连接可正常连接,get请求也能正确进入http_recev,http网页数据一路来到HAL_ETH_Transmit的WRITE_REG(heth->Instance->DMATPDR,(uint32_t)(heth->TxDescList.TxDesc[heth->TxDescList.CurTxDesc]));这行就完蛋了网口DMA的SR寄存器报了个ETH_DMASR_FBES错误对比了一个能运行的例程,虽然http网页数据都在flash里,但是人家的网口发送dma描述符的数据地址开头是0x2开头的,也就是数据被拷进了RAM里,然后给到网口dma而stm32cube直接生成的例程,http网页数据在网口发送dma描述符里的地址开头是0x08,也就是说给到dma的数据地址是在flash里而我尝试在lwip的TCP_Write函数中给一个TCP_WRITE_FLAG_COPY参数,让TCP_write写数据的时候把写入的数据拷入新建的pbuf进行发送,网页就能顺利打开了所以目前所有的证据指向了:STM32的网口DMA只能从RAM中提取数据,如果从flash中取数据就会引起dma错误不知上述理解是否正确

    STM32F4 网口 DMA

    2023-02-13 1
  • 电压跟随器的问题

    大家好,我有一个问题,我想测量一个50V电压,使用两个电阻分压(上面实际是5个220K组成),然后后面接了一个电压跟随器,下面是原理图,实际测试时候发现当运放不供电时,PR1测量是0.206V跟计算值一致,但是给运放供电以后发现电压变成了0.219V,我想知道是什么原因导致的,我用FLUKE17B测的电压,电阻是1%精度的,谢谢。

  • 有个疑问,为什么8位单片机的频率不能搞到70M,100MHZ?

    既然32位能上那么高的频率,按理8位应该也行啊,如果8位单片机把频率提高到M4一样的200MHZ上去,岂不是美滋滋?难道是指令集限制了频率的提升?那X86也是复杂指令集啊人家能上到几GHZ怎么说应该弄到上百MHZ不难啊,如果STC单片机搞到200MHZ,那不是可以解决很多问题了而且大家又都能上手没什么学习成本

  • 请教一下一个三极管推挽输出电路

    本帖最后由32021724于2020-12-118:04编辑最近在给一个可调光的led驱动电源做控制器,挂个图吧LED调光电源输出可调的恒流信号,电源有2根调光信号线,一正一负,可以用0~10V调光,也可以用10V的PWM占空比调光,占空比低于8%电源就把输出断开,这样就能把灯关掉常理说单片机定时器输出3.3V的PWM,然后用三极管配合上拉电阻拉到10V就能输出这个10V的PWM了,类似下面这个实际测试工作良好,除了因为高电平是电阻拉出来的导致上升沿不是那么陡以外,其他功能正常,关灯也正常但是自己手欠了,想吧方波做漂亮点(上升沿下降沿都陡一点),于是想起了单片机IO用的pushpull输出,于是去网上找了找资料,搭了下面这个基于三极管的推挽输出电路然后问题就来了,输出波形到还可以,实际用示波器看了看电路的上升下降都不错。结果接上那个led电源就出事儿了,始终没办法把灯关掉,然后量了一下电路输出,发现单片机控制电路输出0V时,电路输出始终有一个500mV左右的电压在,把led电源去掉就没了。回去看了电源说明书发现电源这个调光信号线为了兼容外置电阻调光,内部好像有个恒流源在往外输出电流信号(越100uA,仿真图里的输出端的10K电阻就是为了模拟这个电流信号),结果这个信号加在我的电路输出端就出现这个500mV的电压了。自己以前没有这么倒着用过三极管,之前都是npn放下面驱动蜂鸣器,pnp放上面驱动数码管啥的,现在这个电路是npn在上pnp在下,通过仿真和定性分析,我大概能猜一下这个电路是怎么工作的,但是这个500mV的电压我搞不明白是怎么来的,三极管才吞进去100uA,饱和压降不应该有500mV这么高,看上去感觉像是下面这个PNP管CE极倒着用产生的。所以想请教一下大佬们,这个500mV的信号是怎么由三极管产生的,另外能减小这个电压不能,先在此谢过各位大佬,望不吝赐教。