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开发,标准外设库函数开发环境搭建

STM8S系列基于STVD标准库外设库开发,PWM输出实现LED呼吸灯效果

STM8S系列基于STVD开发,自定义printf函数+TIM5精确延时函数模块化工程示例

STM8S系列基于IAR开发串口中断接收和发送示例

使用 stvd 编译STM8S 时能看到使用RAM ROM大小的方法

windows下搭建stm8s开发环境