本帖最后由 哀歌与世无争 于 2018-2-22 12:40 编辑
STM32CubeMX设置PC13和PA1为推挽输出,速度50M,用LL库生成的代码如下:
- void MX_GPIO_Init(void)
- {
- LL_GPIO_InitTypeDef GPIO_InitStruct;
- /* GPIO Ports Clock Enable */
- LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
- LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD);
- LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
- /**/
- LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_13);
- /**/
- LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_1);
- /**/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_13;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- /**/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_1;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
复制代码 但是调试后发现寄存器配置不对,GPIOC寄存器如图:
PC13被初始化成模拟输入了,而PC5没有设置却变成了推挽输出了。
PA1倒是没有错误,GPIOA寄存器如图:
总结:
后面又试了几个引脚,发现用LL库高位的引脚(GPIO8-15)初始化会有问题,像PC13,PB13这样的高位引脚,设置后实际改变的是对应低位的引脚PC5和PB5,而想要配置的引脚却变成其他模式了。如果初始化是低位的引脚(GPIO0-7)不会有错误,像PA1,PB1就能被正确初始化。
大家有没有遇到这样的问题呢?
|
环境STM32CubeMX 4.24.0,MDK 5.24
你的STM32F1是哪个系列的,具体什么型号?F1的型号太多了。
感觉不至于出现这样的问题呀,发个工程上来瞧瞧
LL库没玩过,不过我常用的F103系列中,印象是PC13速度不超过2MHZ,具体出自哪里,一时没找到。
我用HAL是好的,前几天刚测试过“YD-STMF1系列核心板”,就是某宝上出现最多的那个STM32F103C8T6小板板,上面的LED用的就是PC13,闪灯灯好着呢。
HAL库出来很久了,用了没啥问题,STM32F1的LL库最近才出的,发现有这个现象才来问问大家的。
没有质疑,只是有疑问,有什么不当的地方请指出
不好搞,用了很多宏,有的还是编译器的关键字,晦涩难懂,最好等官方完善了。还是标准库好,简单的封装,使用稳定。现在为了可视化出了cubemx和这两个库,碎片化严重。
可以试着修复一下嘛~我直接改pinpos并不能正确初始化,后面还有一个currenpin,应该是指向正确的寄存器位置,然后我干脆寄存器初始化了,后面又发现USART那似乎也存在问题,这里用似乎哈,昨晚太晚没深究。