0.91寸OLED屏幕大小的音频频谱,炫酷!
RTT——一种代替串口打印的调试神器
经典振荡器电路及原理分析(超值文章)
超级简单的画PCB封装技巧,从此告别繁琐计算
前面介绍了关于ADC单通道单次采样软件触发的方式《STM32 软件触发ADC采集》,这回同样是单通道但是连续采样的方式。
对于连续采样,就不得不采用中断的方式,因为如果仍然采用阻塞查询方式的话,那单片机就别干其他的事了,永远处于等待采样完成。单次采样不需要考虑是因为能够控制何时进行采样,而连续采样是一开始就一直采样,直到关闭ADC。
这里依然是用ADC1的0通道。
与单次采样不同的地方就是中断的设置和连续采样的设置。
其他的不多说,直接放源码。
对于GPIO的初始化没什么改变
void gpio_init()
{
RCC->CFGR|=(2<<14);
RCC->APB2ENR|=(1<<2)|(1<<9);//GPIOA时钟使能
GPIOA->CRL&=~(0X0F<<0);//PA0 模拟输入模式
}
接下来是ADC的初始化
void adc_init()
{
ADC1->CR2|=(1<<0);
ADC1->CR1&=~(0X0F<<16);//independent mode
ADC1->CR1&=~(1<<8);//扫描模式关闭
ADC1->CR1|=(1<<5);//
ADC1->CR2|=(1<<20);
ADC1->CR2|=(7<<17);
ADC1->CR2&=~(1<<11);//right align
ADC1->CR2|=(1<<3);
while(ADC1->CR2&(1<<3));
ADC1->CR2|=(1<<2);
while(ADC1->CR2&(1<<2));
ADC1->CR2|=(1<<1);
ADC1->SMPR2&=~(7<<0);
ADC1->SQR3&=~(0X1F<<0);
NVIC->ISER[0]|=1<<ADC1_2_IRQn; //18
NVIC->IP[18]=(2<<4)|(2<<0);
ADC1->CR2|=(1<<22);//开始转换
}
然后是ADC中断处理函数
float adc_value;
void ADC1_2_IRQHandler()
{
if(ADC1->SR&(1<<1))
{
adc_value=ADC1->DR;
ADC1->SR&=~(1<<1);
}
}
以上就是核心代码,经过试验,效果如下
拆机音频插座及其原理分析
一个简单实用的负电压生成电路(核心电路)
为什么共集电极放大电路无法放大电压
一眼分清三极管引脚名字的小技巧,从此再也不用对照手册啦
很少有人提起的关于STM32电池备份域的一些细节
JLINK无法烧写程序,原因让人意外
关于推挽电路的说明
炫彩LED
CX32l003输出PWM
Keil中添加对CX32L003系列芯片的支持