头像-330650

KVIN

  • 广东省广州市
  • 单片机
  • 消费电子 工控电子

个人成就

获得 8 次赞

帮助过618人

stm32自带rtc,stm复位后rtc会怎样?

使能RTC的时候需要手动置一个初始时间的,如果没有即使保存到flash,或者其他存储芯片,而仅仅是使用其进行时间计数,在复位之后会清零,不会接着断电前的时间

【参与有礼】吐槽一下程序遇到问题时的复杂心情

一杯茶,一包烟,一个问题想一天

用AD10 手工画电路板时遇到的问题

确定是一个网络的吗?如果是一个网络的,我还没有出现过这种问题。不过有一种情况会这样,就是单放一个过孔,这个过孔没有指定任何网络,或没有跟其他线连接在一起时,这时候这个过孔是没有网络的,想连线上去是连不上去的,正确方法要么先走线到这个指定位置,然后防止过孔,或者放置过孔,然后选定网络,然后连线

多通道AD采集模拟量的时候是不是只能用dma模式?

不是,可以不用。用DMA的就不说了,你应该已经会了,如果多通道不用DMA,首先需要打开扫描模式,然后区分STM32的单次模式与连续模式,单次模式并不是指一个通道,假如你同时打开了四个通道,单词模式时会把这四个通道采集一遍就停止采集,而连续模式就是这四个通道采集一遍一直又接着从第一个开始采集。如果要使用非DMA和中断模式,参考这个配置:扫描模式+单词转换模式+间断模式。扫描模式时配置多通道时必须打开的;单词转换的意思是不需要不停的去采集每个通道,而是采集完一遍之后就停止;间断模式可以让扫描的四个通道分为四个组,如果你使用了CUBEMX,就是Number of Conversion这个选项,如果我没记错的话,你使用非DMA模式,这里的Number of Conversion这个选项需要配置为1,否则读取AD值时只能读取最后一个通道。具体使用HAL库的代码如下:for(i=1;i<5;i++) { HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc10xffff); adcBuf[i]=HAL_ADC_GetValue(&hadc1); printf("------ch:%d--%d-------\r\n"iadcBuf[i]); } HAL_ADC_Stop(&hadc1); HAL_Delay(1000);​调用hal库接口函数也需要注意,HAL_ADC_Start一定要放在for里面,即每一个通道都要触发。四个通道都采集完了,再去调用HAL_ADC_Stop(&hadc1);结束本次ADC采集。​

怎么强制触发定时器更新中断?

不知道你的是什么芯片,如果是32的话,查看32的寄存器手册事件产生寄存器(TIMx->EGR),第一位即是更新事件,将此位置1,则会以软件方式产生一个更新事件,将计数器CNT强制清零。写法:TIMx->EGR |= (1<<0),上式中的x代表定时器编号,定时器1,则就是TIM1->EGR 如果你喜欢用库的方式,就找库中的软件产生更新事件的函数,库里面其实也是操作寄存器的,明白意思即可。如果你使用的不是32芯片,同样的,找是否有事件产生寄存器。

关于PWM频率的测量假设。。

这种是用外部中断的方式来测量PWM频率,注意外部中断优先级设置高点,如果PWM频率很高,采用这种方法,中断内不要写太多程序。另外,你可以尝试定时器的输入捕捉功能,测量PWM频率我一般用定时器的输入捕捉

基于51单片机,lcd1602怎么显示倒计时秒表?

编写1602驱动,配合定时器做倒计时,把时间显示出来

stm32驱动电机

看什么电机,一般驱动电机为H桥,直流两相电机,配置两路互补PWM即可,或者不用互补PWM,一路PWM即可,BLDC方波使用高级定时器TIM1或TIM8,配置三路互补PWM即可,BLDC或PMSM使用FOC需要使用SVPWM,配置三路中央对齐模式的互补PWM。