刚接触STM32C0,发现它和F0很像,但外设更精简。GPIO操作倒是简单,但有些细节还是值得注意。C0的GPIO没有模拟功能(AFIO),所以不能用重映射,所有外设都固定引脚。
我做了一个LED闪烁的程序,用HAL库的话,HAL_GPIO_Init()会自动配置时钟,但如果是标准库或者LL库,需要手动使能GPIO时钟。C0的时钟树比较简单,只有一个SYSCLK,没有PLL,最高48MHz,所以外设频率都是48MHz分频来的。
另外,C0的GPIO输出速度选项只有LOW、MEDIUM、HIGH,没有VERY_HIGH,因为C0定位是低成本,高频切换需求少。如果做PWM,频率高了可能波形不好看。
中断配置方面,C0支持外部中断线,但同一个中断线不能共享多个引脚(不像F1可以),所以如果有多个按键,要用不同的EXTI线。我用了PA0、PB0、PC0,结果只有PA0能进中断,后来发现EXTI0只能对应一个端口,要选PA0就不能用PB0。
还有一个小问题是,C0的复位后默认所有GPIO都是模拟输入,所以如果不初始化,直接读引脚状态会得到随机值。建议上电先配置需要的GPIO为输入或输出。
现在做个简单的按键检测,用轮询方式,效果不错。希望C0能出一些低成本的评估板,现在NUCLEO板有点贵,适合学生党的便宜板子更好。
|
|