首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32 DMA通道外设基地址的配置

stm32 DMA通道外设基地址的配置

看了许多资料都没有讲如何配置DMA通道外设基地址
ADC 规则数据寄存器(ADC_DR)的地址偏移:4Ch
#define ADC1_DR_Address    ((u32)0x4001244C)
就是ADC1的外设基地址(0x4001 2400)加上ADC数据寄存器(ADC_DR)的偏移地址(0x4c)计算得到的。
Example:
/************************************************************************************
* 文件名  :main.c
* 描述    :串口1(USART1)向电脑发送当前ADC1的转换电压值         
* 库版本  :ST3.5.0
**********************************************************************************/
#include "stm32f10x.h"
#include "usart1.h"
#include "adc.h"
// ADC1转换的电压值通过DMA方式传到SRAM
extern __IO uint16_t ADC_ConvertedValue;
// 局部变量,用于保存转换计算后的电压值
float ADC_ConvertedValueLocal;      
/**
  * @brief  Main program.
  * @param  None
  * @retval : None
  */
int main(void)
{
    /* USART1 config */
    USART1_Config();
    /* enable adc1 and config adc1 to dma mode */
    ADC1_Init();
    while (1)
    {
        ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3; // 读取转换的AD值
        printf("\r\n The current AD value = 0x%04X \r\n", ADC_ConvertedValue);
        printf("\r\n The current AD value = %f V \r\n",ADC_ConvertedValueLocal);
    }
}
/*************************************************************************************************/
/************************************************************************************
* 文件名  :adc.c
***********************************************************************************/
#include "adc.h"
#define ADC1_DR_Address    ((u32)0x40012400+0x4c)
__IO uint16_t ADC_ConvertedValue;
/*
* 函数名:ADC1_GPIO_Config
* 描述  :使能ADC1和DMA1的时钟,初始化PC.01
* 输入  : 无
* 输出  :无
* 调用  :内部调用
*/
static void ADC1_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    /* Enable DMA clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
    /* Enable ADC1 and GPIOC clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
    /* Configure PC.01  as analog input */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOC, &GPIO_InitStructure);                    // PC1,输入时不用设置速率
}
继承事业,薪火相传
返回列表