本帖最后由 wenyangzeng 于 2014-12-9 07:36 编辑 昨天用STM32CubeMX 对开发板进行编译下载收到满意的结果。其中对PA5的操作是使用直接寄存器模式:GPIOA->ODR |= 0X0020; //置1 GPIOA->ODR &= ~0X0020;//置0 今天打算用F0库操作模式来进行: GPIO_SetBits(GPIOA ,GPIO_Pin_5); GPIO_ResetBits(GPIOA ,GPIO_Pin_5); 不料,上面2条语句编译却报错,用STM32CubeMX生成的函数库竟然不支持F0函数库对GPIO的置位清零。有点纳闷,CubeMX同样是ST的软件包,为何自家人要各立门派,相互不兼容。其实F0和F1的函数库也有这个问题,有许多操作相同功能函数,它们的函数表达式却有少许差异,这给使用者软件移植带来诸多不变。 阅读STM32CubeMX生成的函数库,才发现这2条函数表达式如下: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET); 在此分享,望各位少走弯路。 CubeMX生成的系统时钟配置的函数如下,各位可以看出其中的差异: void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0); __SYSCFG_CLK_ENABLE(); } 真希望ST能把STM32CubeMX升级一下,把这些差异兼容掉。 |
【STM32F030开发日志/评测/笔记】+串口echo测试程序
【STM32F030开发日志/评测/笔记】从无到有
STM32F030F4 的 STOP 电流 不稳定
【活动】2013年末签到,赢STM32F0超值型探索套件(已公布结果)
[晒一晒]STM32F0 Discovery板卡
【说出你的故事】从对STM32白痴到入门+STM32F030R8 Boost MPPT
Nucleo STM32F072 FreeRTOS移植
【小“福”蝶赏灯展+DISCO-STM32F0308】
[STM32F072 Nucleo]开发笔记(四) 用按钮代替方向盘硬件测试
[STM32F072 Nucleo]开发笔记(二)扩展USB接口
编译下载都没出错的。就是灯不亮,这是为什么呢?
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SystemInit();
RCC_APB2PeriphClockCmd(RCC_AHBENR_GPIOAEN,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_5);
//delay(1);
//GPIO_ResetBits(GPIOA,GPIO_Pin_5);
//delay(10);
}
}
恩恩,就是这个,我找了好久在一个例程里面找到了。还请问一下,delay怎么弄呢?
void delay(uint32_t nCount)
{
for(;nCount!=0;nCount--);
}
对吗?这个也不同,定义类型是用uint32_t uint16_t吗?根本找到不到哪里有关于这些的说明。唉。
我这个延时函数放main.c主函数上面,在主函数里面调用也出错。我也不知道为什么。
不知道你用的是哪个函数库,下面这句时钟的配置:
RCC_APB2PeriphClockCmd(RCC_AHBENR_GPIOAEN,ENABLE);
原本官方是这样写的:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
F0好像没有APB2.
谢谢楼上的指教
想用cubemx,但感觉还不是时候
其实CUBEMX完全可以将库函数语法做成与STM32函数库语法相兼容的。这样可以让用户很快就能适应。当初STM321.0库过渡到2.0-3.0库就让用户经历了一次痛苦的过程了。