STM8L051比较器使用案例(一)COMP1基本使用
8L 的比较器没找到例程,只能自己啃手册和看官方例程,5个例程:
AnalogWatchdog是个窗口比较器例程
COMP1-Halt是比较器1例程
其余三个是COMP2例程。
从资料分析:
COMP1的内部连接图:
比较器COMP1的输入Threshold是固定接在参考电压Vref(1.22V)上,具体特性可参见datasheet:
另一端可接任意一个外部IO口
分析具体接线要看这张图:
我们计划把PC4作为采样端,所以需要连接AS1,再看IO SWITCH,查表:
操作步骤:
1. 将Vref连接到COMP1 ,设置寄存器COMP_CSR3的对应位
COMP_VrefintToCOMP1Connect(ENABLE);
2.参考上图连接对应的I/O口(连接PC4)
/* close the analog switch number 14 */
SYSCFG_RIAnalogSwitchConfig(RI_AnalogSwitch_14, ENABLE);
/* close the analog switch number 1 */
SYSCFG_RIAnalogSwitchConfig(RI_AnalogSwitch_1, ENABLE);
/* close the I/O switch number 4 */
SYSCFG_RIIOSwitchConfig(RI_IOSwitch_5, ENABLE);
3.使能COMP1中断
/* Enable COMP1 Interrupt */
COMP_ITConfig(COMP_Selection_COMP1, ENABLE);
4.定义中断触发事件类型(边缘)
/* Configure the event detection */
COMP_EdgeConfig(COMP_Selection_COMP1, COMP_Edge_Rising);
程序设计思路:
1. 电位器调节PB7输入电平,高于Vref则触发中断,LED1亮(上升沿);
2. 按键触发外部中断,LED2灭
中断处理
INTERRUPT_HANDLER(EXTI4_IRQHandler, 12)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
// 按键按下
extern int flag;
EXTI_ClearITPendingBit(EXTI_IT_Pin4);
/* Enter halt mode */
// halt();
flag=!flag;
LED1_OFF;
}
INTERRUPT_HANDLER(ADC1_COMP_IRQHandler, 18)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
LED1_ON;
COMP_ClearITPendingBit(COMP_Selection_COMP1);
}
注意:
外部中断设置时,如果用PCx,不用指定port,如果用PBx,则要用
//KEY引脚配置,下降沿触发;
EXTI_SelectPort(EXTI_Port_B);
EXTI_SetPinSensitivity(EXTI_Pin_6, EXTI_Trigger_Rising_Falling);
第二句就是对应的中断矢量。
测试OK
_霏: 第一种怎么关闭安全启动项?
weixin_46301104: 博主,我在make的时候报错: riscv-none-gcc-8.2/gnu-mcu-eclipse/riscv-none-gcc/8.2.0-2.2-20190521-0004/bin/libiconv.so.2: file too short 是什么原因啊
weixin_58158250: led1_thread 这个是个什么东西,应该要怎么定义呀
自由如风352: 请问一里面通过蓝牙播放音乐的示例博主成功了吗,我的播放音乐时喇叭只有震动没有声音。用SD卡放音乐示例就有声音