历史上的今天
今天是:2024年12月17日(星期二)
2020年12月17日 | STM32F7xx —— ADC
2020-12-17 来源:eefocus
/*****************************************************************************
* ADC1 ADC2 ADC3
* 通道0 PA0 PA0 PA0
* 通道1 PA1 PA1 PA1
* 通道2 PA2 PA2 PA2
* 通道3 PA3 PA3 PA3
* 通道4 PA4 PA4 PF6
* 通道5 PA5 PA5 PF7
* 通道6 PA6 PA6 PF8
* 通道7 PA7 PA7 PF9
* 通道8 PB0 PB0 PF10
* 通道9 PB1 PB1 PF3
* 通道10 PC0 PC0 PC0
* 通道11 PC1 PC1 PC1
* 通道12 PC2 PC2 PC2
* 通道13 PC3 PC3 PC3
* 通道14 PC4 PC4 PF4
* 通道15 PC5 PC5 PF5
* 通道18 温度传感器
*****************************************************************************/
static ADC_HandleTypeDef adc_handle;
static void adc_gpio_init(void)
{
}
static void adc_mode_init(void)
{
__HAL_RCC_ADC1_CLK_ENABLE();
adc_handle.Instance = ADC1;
adc_handle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
adc_handle.Init.Resolution = ADC_RESOLUTION_12B; //12 位模式
adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT; //右对齐
adc_handle.Init.ScanConvMode = DISABLE; //非扫描模式
adc_handle.Init.EOCSelection = DISABLE; //关闭 EOC 中断
adc_handle.Init.ContinuousConvMode = DISABLE; //关闭连续转换
adc_handle.Init.NbrOfConversion = 1;
adc_handle.Init.DiscontinuousConvMode = DISABLE; //禁止不连续采样模式
adc_handle.Init.NbrOfDiscConversion = 0; //不连续采样通道数为 0
adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START; //软件触发
adc_handle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; //使用软件触发
adc_handle.Init.DMAContinuousRequests = DISABLE; //关闭 DMA 请求
HAL_ADC_Init(&adc_handle);
}
void ADCInit(void)
{
adc_gpio_init();
adc_mode_init();
}
uint16_t ADCGet(uint32_t channel)
{
ADC_ChannelConfTypeDef adc_config;
adc_config.Channel = channel;
adc_config.Rank = 1;
adc_config.SamplingTime = ADC_SAMPLETIME_480CYCLES;
adc_config.Offset = 0;
HAL_ADC_ConfigChannel(&adc_handle, &adc_config);
HAL_ADC_Start(&adc_handle);
HAL_ADC_PollForConversion(&adc_handle, 10); //轮询转换
return (uint16_t)HAL_ADC_GetValue(&adc_handle);
}
float ADCAverageGet(uint32_t channel, uint16_t times)
{
float temp;
uint32_t value = 0, average;
uint16_t i;
for(i = 0; i < times; ++i)
{
value += ADCGet(channel);
}
average = value / times;
temp = (float)average * (3.3 / 4096);
return temp;
}
// T = ((Vsense - V25) / avg_slope) + 25;
// V25:Vsense在25°时的数值(0.76)
// avg_slope:温度与Vsense曲线的平均斜率(2.5mV/度)
float ADCSocInnerTemperature(void)
{
float temperature;
temperature = ADCAverageGet(ADC_CHANNEL_TEMPSENSOR, 10);
temperature = (temperature - 0.76f) * 400 + 25;
printf("%frn", temperature);
return temperature;
}
下一篇:STM32F7xx —— 看门狗
史海拾趣
|
DOS 微软一开始选用了派特森的Q-DOS “QUICK AND DISK OPERATING SYSTEM ”为基础然后再扩充功能而成 MS-DOS,主要是采用由IBM 提供的使用8088 微处理器的计算机作开发平台,它是以16 字节单人单工操作系统,特别适合一些功能简单 ...… 查看全部问答> |
|
摘要: 近几年嵌入式Internet开始迅猛发展,但绝大多数嵌入式Internet都使用微控制器和相应的软件来实现。本文介绍一种基于硬件来实现嵌入式Web Server的方案。该方案的核心思想是用VHDL语言来设计实现,并且用FPGA进行验证。 关键词: VHDL Inte ...… 查看全部问答> |
|
专家好: 我的PDA前两天在公司测试部门发现,按键进入深度休眠后,不能马上按键唤醒,只有等5~6秒(大约值)后才能马上唤醒 我的按键休眠是设置的GPIO0,唤醒源也是GPIO0 具体的设置如下: &nbs ...… 查看全部问答> |
|
shuiyan 大哥你好! 小弟最近在搞OAL里的中断函数OALTimerInit遇到个问题,是这样的: 我在private下的armtrap.s里发现了中断的异常跳转表 VectorInstructions ldr pc, [p ...… 查看全部问答> |
|
不好意思,问一下这个问题:-sh: ./helloworld: not found 我是一名初学者,今天终于完成了博创S3C2410上Linux 2.6.22的移植,网卡,文件系统都能正常使用,感觉蛮有成就感的。 但如今这个问题不知道如何解决了: 用编译内核和Busybox 1.5.1的编译器编译了一个helloworld,在开发板上用NFS挂载上,运行./hello ...… 查看全部问答> |
|
我写了两段不同的verilog代码来实现同一个功能,现在我想比较哪个代码在FPGA上跑的更快,我在Quartus II里如何看出来呢,请各位指导我一下,谢谢。… 查看全部问答> |




