完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
众所周知,GPIO不属于外设,属于内存233
最近有个东东需要频繁对IO口进行读取,虽然说可以用定时器中断,但是频繁地进入中断会影响性能,于是用DMA来处理。 cube和keil的工程在下方的链接中,这里就不展开了 配置好cube后,打开stm32f1xx_hal_msp.c文件,添加HAL_DMA_Start(htim_base->hdma[TIM_DMA_ID_UPDATE],(uint32_t)&GPIOC->IDR,(uint32_t)&gpioc_sta,1)用于启动DMA 如下图所示 在main函数中,每隔一段时间读取一次GPIO状态,并打印出来 所使用的单片机为网上常见的c8t6,PC13的硬件如下图所示 cube中设置PC13的状态为No pull-up and no pull-down,故没有外界干涉是应该返回1,但实际上返回了0 很明显返回的值不正确 我们回到stm32f1xx_hal_msp.c文件,将传输方向从DMA_PERIPH_TO_MEMORY该为DMA_MEMORY_TO_MEMORY 重新编译并下载,可以看到返回的值是1,用导线将该引脚拉到地,返回的值是0 结果正确了 emmmmm所以GPIO是内存? 之前有做过实验,在ADC的触发函数中,在stm32f1xx_hal_adc.c中的HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)函数中 将HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length) 改为HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&GPIOx->IDR, (uint32_t)pData, Length) DMA设置的传输方向是DMA_PERIPH_TO_MEMORY而不是DMA_MEMORY_TO_MEMORY,返回的却是正确GPIO的数据 这就搞不懂了,知道原因的dalao麻烦告诉我一下233 |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2990 浏览 16 评论
3490 浏览 1 评论
9052 浏览 16 评论
4085 浏览 18 评论
1173浏览 3评论
603浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
596浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2333浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 06:48 , Processed in 1.258204 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号