历史上的今天
返回首页

历史上的今天

今天是:2025年08月15日(星期五)

正在发生

2019年08月15日 | STM32待机模式Standby Mode与ADC DMA模式测试备忘

2019-08-15 来源:eefocus

1)STM32运行十秒后自动进入待机,使用WakeUp引脚唤醒CPU后,重复以上动作。


int main(void)

{

time_cnt = 0;

    

    HAL_Init();

SystemClock_Config();

    

HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_PWR_DisableWakeUpPin(PWR_CSR_EWUP); //禁止wakeup PA0引脚,可以用来做普通引脚功能

    

while (1)

{

HAL_Delay(1000);

        HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13); //运行时,闪LED

        time_cnt++;

        if(time_cnt >= 10) //10秒后,进入待机模式

        {

            time_cnt = 0;

            

//打开wakeup引脚,待机后来个上升沿就可以唤醒cpu了

            HAL_PWR_EnableWakeUpPin(PWR_CSR_EWUP);

//清除wakeup_flag,这里很重要,假如没有,就不能重复的让cpu唤醒再进入待机

//即HAL_PWR_EnterSTANDBYMode()将不起作用!!

            __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

//cpu进入待机模式,NREST Pin,IWDG,RTC alarm,WakeUp引脚上升沿,都可以唤醒cpu

            HAL_PWR_EnterSTANDBYMode();

        }

    }

}


其他都没什么,最重要的是注意要清一下唤醒标志位 __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

因为cpu唤醒第一次后,会置位PWR_FLAG_WU和PWR_FLAG_SB,假如不清除,第二次待机就实现不了了。


2)打开ADC,使用扫描模式,分别采样Ch7和Ch8数据,存放于一个数组内





库函数用起来还是非常方便的


__IO uint16_t   adc_value[100];

 

//start adc

HAL_ADC_Start_DMA(&hadc, (uint32_t*)&adc_value[0], 100);

dma就会自动将adc的数据采样100个,放到adc_value 这个数组内,排放顺序当然是adc_value[0]放Ch7,adc_value[1]放Ch8,adc_value[2]放Ch7,adc_value[3]放Ch8。。。以此交错放置,采样完会产生中断。


void DMA1_Channel1_IRQHandler(void)

{

    /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */

    

    /* USER CODE END DMA1_Channel1_IRQn 0 */

    HAL_NVIC_ClearPendingIRQ(DMA1_Channel1_IRQn);

    

    HAL_DMA_IRQHandler(&hdma_adc);

    /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */

    

    /* USER CODE END DMA1_Channel1_IRQn 1 */

}

上面是Stm32Cube自动生成的代码,挺方便的,中断后会自动进入这个函数,这时只需要再自己写一个


void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)

{

    //自定义功能

}

来替换掉系统的弱定义函数就可以了。

__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) //系统给出的弱定义空函数

然后就可以关闭ADC

//shut down adc

HAL_ADC_Stop_DMA(&hadc);

到这里,ADC采样一百个点完成,都存放在adc_value[100]这个数组里了,简单吧。




完。


推荐阅读

史海拾趣

Essentra Components公司的发展小趣事

Essentra Components公司一直将客户服务放在首位,通过提供优质的售前咨询、售中支持和售后服务,赢得了客户的广泛赞誉。公司不仅为客户提供了丰富的产品选择,还根据客户的具体需求提供定制化的解决方案。此外,公司还建立了完善的物流配送体系,确保产品能够及时、准确地送达客户手中。这些努力使得Essentra Components在客户中树立了良好的口碑,为公司的发展奠定了坚实的基础。

Hei Inc Optoelectronic Division公司的发展小趣事
定期对控制电路进行检查和维护,及时发现并处理潜在问题,以确保设备的长期稳定运行。
Aten International公司的发展小趣事

在电子行业中,标准化建设对于提升产品质量和企业竞争力具有重要意义。Aten International深知标准化建设的重要性,因此在产品研发和生产过程中始终坚持高标准、严要求。公司还积极参与国际标准化组织的活动,推动相关标准的制定和完善。正是凭借在标准化建设方面的卓越表现,Aten International赢得了业界的高度认可和广泛赞誉。

以上五个故事虽然基于虚构,但它们都反映了Aten International在电子行业发展的真实情况。这些故事展示了公司在技术创新、市场拓展、标准化建设等方面的努力和成就,也体现了Aten International在电子行业中的领先地位和卓越贡献。

富信半导体(FOSAN)公司的发展小趣事

随着多媒体技术的快速发展,专业影音产品的市场需求逐渐增长。Aten International紧跟市场趋势,投入大量研发资源,推出了一系列专业影音产品,包括高清视频切换器、音频分配器等。这些产品以其高品质、高稳定性受到了市场的广泛认可,为Aten International在电子行业树立了良好的口碑。

CT [ Central Technologies ]公司的发展小趣事

在追求经济效益的同时,CT公司始终注重履行企业社会责任。公司积极参与公益事业,支持教育事业发展,为贫困地区捐赠教育设备和资金。此外,CT公司还注重环保和可持续发展,通过采用环保材料和节能减排措施等方式降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也为公司赢得了更多消费者的认可和支持。

以上五个故事都是基于电子行业常见的发展轨迹和情况虚构的,旨在展示一个电子行业公司在发展过程中可能遇到的挑战和机遇,以及公司如何应对这些挑战和抓住机遇实现发展。这些故事并不针对任何具体的公司或个人,也不包含任何褒贬评价。

Carlisle Interconnect Technologies公司的发展小趣事

Carlisle Interconnect Technologies(当时名为Tensolite)的创业之路始于1940年,在纽约Tarrytown的一个小工厂里。公司创始人凭借对微型绝缘电线和电缆的深刻理解和前瞻视野,开创了绝缘电线电缆的新纪元。Tensolite这个名称,象征着产品的高拉伸强度和紧凑轻巧的特性,这种创新的设计理念很快在市场上赢得了口碑。公司的第一根绝缘线产品成功应用于电加热,为第二次世界大战期间的空军飞行员提供了温暖的手套和飞行服,这一成就不仅彰显了公司的技术实力,也为后续发展奠定了坚实的基础。

问答坊 | AI 解惑

谁有点阵生成软件

我现在找了很久没找到一个点阵生成软件,我现在急需它,如果谁有能帮帮我吗?发我邮箱  lijianhuijgsdx@163.com   QQ535233725.非常感谢!!!!!!…

查看全部问答>

DSP的C语言心得记录-利用CCS分析DSP的时钟运行周期

分别用C语言和汇编语言进行程序设计,计算正弦函数值,并比较代码效率。 1)C语言编程 #include #define NX 180 //最大正弦角度 #define pi 3.14159 short i; double x[NX] //定义输入正弦角度数组(弧度值) double r[NX] //定义输出 ...…

查看全部问答>

ARM的中断处理和SWI参数问题

我现在知道的在ARM里软件中断(SWI call)是用来将模式转换成超级用户模式的(SVC mode) 然后用这两句话可以将SWI的参数储存在R0里面 LDR R0,[LR,#-4] BIC R0,R0, #0xFF000000 因为刚刚学习ARM, 现在我不理解的是这个SWI的参数到底可以用来干什么 ...…

查看全部问答>

求助:VS.NET 2008下WINCE模拟器 需要带网络连接功能

VS.NET 2008不像03提供了WINCE模拟器 求助 刚折腾了一个版本 不带网络功能 即希望在模拟器上可以配置IP PING通 这样可以测试一些访问MSSQL的程序 谢谢 不知道表达清楚了没有……汗…

查看全部问答>

流小驱动SRB.NumberOfPhysicalPages时钟为0

修改DDK中testcap 做的摄像头驱动,想使用DMA得到数据。DDK文档中说SRB的ScatterGatherBuffer就是作为DMA使用的,NumberOfPhysicalPages是其中的元素个数。但是我在生成图像的ImageSynth函数中得到的NumberOfPhysicalPages却始终为0.    ...…

查看全部问答>

NandFlash块大小为16K,如果写一个不足16K的文件进去,是不是要把该块剩下的空间写成0?

NandFlash块大小为16K,如果写一个不足16K的文件进去,是不是要把该块剩下的空间写成0?…

查看全部问答>

求助:WINCE触摸屏校准问题?

利用控制面板中的“校准”,校准后总是不能正常退出。串口打印提示 : M 474,507  507,520  33,13M 2061,1655  2099,1655  38,0Maximum Allowed Error 7: Maximum error 13325 exceeds calibration th ...…

查看全部问答>

如果采用USB<->1394 进行WinDbg调试

目标机是6芯的1394接口,本本只有USB接口,不知该如何设置WinDbg,有知道的DX请告知,谢谢。…

查看全部问答>

智能手机影响汽车信息娱乐

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 苹果公司的iPhone把智能手机从专注于通讯的设备变成了以应用为中心的多用途移动平台,可以用于许多产业之中。据iSuppli公司,其它智能手机平台迅速跟进,纷纷增加了多点触控用户界面、应用开发 ...…

查看全部问答>

求助:zigbee两个测温节点总有一个为0

我设计的无限温度传感网络由一个路由设备和两个温度测量节点组成。两个测温节点的程序应该是一样的吧?我是通过长地址(IEEE地址)来在路由设备上区分两个节点的数据的,部分原代码如下:unsigned int current_temperature1 = 0;unsigned int curre ...…

查看全部问答>