STM8S系列基于STVD开发,ADC不同精度采样示例
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM8S系列基于STVD开发,ADC不同精度采样示例相关的知识,希望对你有一定的参考价值。
STM8S系列基于STVD开发,ADC不同精度采样示例
✨本工程以上面一篇的工程为模板,在此基础上实现ADC电压采样。
- 🎬📽🎞工程编译和烧录以及调试信息过程演示:
🛠功能说明
📝本案例采用ADC单次采样模式,本示例代码提供不同精度的采集方式,根据需求选择对应的接口函数。
📚ADC功能介绍
🔖STM8S903K3/F3系列产品包含10位逐次逼近A /D转换器(ADC1),具有多达7个外部和1个内部多路输入通道.
- 输入电压范围:0 ~ VDD
- 转换时间:14个时钟周期
- 单、连续和缓冲连续转换模式
- 缓冲区大小(n x 10位),其中n =输入通道数
- 扫描模式,用于单个和连续转换一个频道序列
- 模拟看门狗能力,具有可编程上下限阈值
- AIN7通道上的内部参考电压
- 模拟看门狗中断
- 外部触发输入
- 从TIM1 TRGO触发
- 转换结束中断
📓工程架构
- 🍁采用模块化设计
📖主程序代码实现
🌿采集的引脚是PD3,AIN4的电压值
void main()
unsigned int VALUE;
CLK_CKDIVR = 0x00; //主频16MHz
_asm("SIM");
GPIO_Init();
ADC_GPIO_Init();
UART1_Init(115200);
Init_Timer5();
_asm("RIM");
while (1)
TIM_Delay_ms( 800);
ADC_CH_Init(3);
if(ADC_flag == 1)
// VALUE = ADC1_GetConversionValue();//8bit精度adc
VALUE = ReadVol_CH3();//10bit精度
My_print_Information_uint("ADC_Value= ", VALUE);
ADC_flag = 0; // ADC中断标志 置0
- 📋中断号
struct interrupt_vector const _vectab[] =
0x82, (interrupt_handler_t)_stext, /* reset */
0x82, NonHandledInterrupt, /* trap */
0x82, NonHandledInterrupt, /* irq0 */
0x82, NonHandledInterrupt, /* irq1 */
0x82, NonHandledInterrupt, /* irq2 */
0x82, NonHandledInterrupt, /* irq3 */
0x82, NonHandledInterrupt, /* irq4 */
0x82, NonHandledInterrupt, /* irq5 */
0x82, NonHandledInterrupt, /* irq6 */
0x82, NonHandledInterrupt, /* irq7 */
0x82, NonHandledInterrupt, /* irq8 */
0x82, NonHandledInterrupt, /* irq9 */
0x82, NonHandledInterrupt, /* irq10 */
0x82, NonHandledInterrupt, /* irq11 */
0x82, NonHandledInterrupt, /* irq12 */
0x82, TIM5_UPD_OVF_IRQHandler, /* irq13 */
0x82, NonHandledInterrupt, /* irq14 */
0x82, NonHandledInterrupt, /* irq15 */
0x82, NonHandledInterrupt, /* irq16 */
0x82, NonHandledInterrupt, /* irq17 */
0x82, UART1_Receive_Interrupt, /* irq18 */
0x82, NonHandledInterrupt, /* irq19 */
0x82, NonHandledInterrupt, /* irq20 */
0x82, NonHandledInterrupt, /* irq21 */
0x82, ADC_Handle, /* irq22 */
0x82, NonHandledInterrupt, /* irq23 */
0x82, NonHandledInterrupt, /* irq24 */
0x82, NonHandledInterrupt, /* irq25 */
0x82, NonHandledInterrupt, /* irq26 */
0x82, NonHandledInterrupt, /* irq27 */
0x82, NonHandledInterrupt, /* irq28 */
0x82, NonHandledInterrupt, /* irq29 */
;
- 📑不同精度接口函数
uint16_t ADC1_GetConversionValue(void)
//8BIT精度adc
uint16_t temph = 0;
uint8_t templ = 0;
/* Read MSB first*/
temph = DATAH; // 读出ADC结果的高8位
/* Then read LSB */
templ = DATAL; // 读出ADC结果的低8位
DATAH = (u16)((u16)((u16)templ << 6) | (u16)((u16)temph << 8));
ADC_CR1 = ADC_CR1 | 0x01;
return ((u16)temph);
u16 ReadVol_CH3( void )
//10BIT精度adc
u16 voltage = 0;
if( ADC_flag )
ADC_flag = 0;
voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据 0--1024
ADC_CR1 = ADC_CR1 | 0x01; //再次将CR1寄存器的最低位置1,
;
return voltage;
✅工程源码
链接:https://pan.baidu.com/s/179Hjd-OGmSUzaprnd5aVSA
提取码:xil8
以上是关于STM8S系列基于STVD开发,ADC不同精度采样示例的主要内容,如果未能解决你的问题,请参考以下文章
STM8S系列基于STVD标准库外设库开发,PWM输出实现LED呼吸灯效果
STM8S系列基于STVD开发,自定义printf函数+TIM5精确延时函数模块化工程示例