packy1: IDR是输入模式使用的,比如外部保护电路改变比较器输出,比较器直接连入IO时,读取IDR寄存器的对应电平可以知道某外设工作异常,当外设使能是通过stm32IO操作时,就可以通过该IO关闭外设。比如比较器翻转会触发外部中断,ISR函数读取IDR并根据结果实时响应处理,能及时避免外设异常的灾难后果(我的LED驱动多支路各有一个采样电阻,如果电压突变改变比较器输出意味着有支路断路,需要停止或降电流驱动,pwm端就改变占空比或直接停止使能,防止剩余led平分断路支路的电流而超负荷烧毁)。还有为了保证原子性和较小的操作时钟周期,其实直接操作BSRR更方便:因为ODR同时操作所有位(为所有位选择性置0或置1),但BSRR可以选择性的操作位(BSRR可以对所有需要给明确值的位给值,而跳过那些并不需要改变值的位,且置0置1可以同步进行,但严禁对同一个位同时置0置1),你这里ODR的操作会对16位的15个写入原始值,另一个写入改变值,而BSRR操作会忽略15位,直接改变目标位,相当于时钟周期减少到1/16
三阶魔方拼全6面口诀
关于CRH、CRL、ODR和IDR寄存器的使用总结