IAR 向 Keil 移植过程中在include "core_cm3.h" 文件情况下报错 stm32f10x.h 中 "__IO" 未定义和 "uint32_t" 未定义

本文解答了STM32F10x项目中遇到的关于__IO和uint32_t未定义的问题,原因是core_cm3.h文件版本过旧。解决方案是使用最新版本的core_cm3.h文件替换原有文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Q: log 中显示 stm32f10x.h 中 "__IO" 未定义和 "uint32_t" 未定义, 但是已经 #inlcude "core_cm3.h" ,__IO, uint32_t 已经在 core_cm3.h 文件中有定义,并且可以右键查找到定义。

A : 因为官网上下载的 STM32F10x_StdPeriph_Lib_V3.5.0 库中 core_cm3.h 版本太老,应该用伴随 Keil 安装解压的源目录下的 C:\Keil\ARM\CMSIS\Include 路径下的 core_cm3.h 文件。

S : 用安装源目录下的 core_cm3.h 文件替换掉工程文件夹中的原 core_cm3.h 文件。

#include "stm32f10x.h" // Device header #include "Delay.h" void Buzzer_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); Buzzer_off(); } void Buzzer_on(void) { GPIO_ResetBits(GPIOA, GPIO_Pin_3); // 低电平触发,开启蜂鸣器 } void Buzzer_off(void) { GPIO_SetBits(GPIOA, GPIO_Pin_3); // 高电平关闭蜂鸣器 } void Buzzer_Beep(uint16_t frequency, uint16_t duration) { // 频率(Hz)转换为周期值 uint16_t period = 72000000 / frequency / 2; // 假设系统时钟为72MHz // 设置PWM参数 PWM_SetBuzzerFrequency(frequency); PWM_SetBuzzerDutyCycle(50); // 50%占空比 Buzzer_on(); Delay_ms(duration); Buzzer_off(); } #include "stm32f10x.h" // Device header void PWM_Init(void) { //1.开启时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // TIM2用于电机 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // TIM3用于蜂鸣器 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 电机PWM引脚配置 (GPIOA.1, GPIOA.2) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 蜂鸣器PWM引脚配置 (GPIOB.1) GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //2.选择时基准单元的时钟(内部时钟) TIM_InternalClockConfig(TIM2); // 72MHz TIM_InternalClockConfig(TIM3); // 72MHz //3.配置电机TIM2时基单元 - 保持原有配置 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; // ARR=100 TIM_TimeBaseInitStructure.TIM_Prescaler = 36 - 1; // 频率约20kHz TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); //3.配置蜂鸣器TIM3时基单元 - 新配置 TIM_TimeBaseInitStructure.TIM_Period = 1000 - 1; // ARR=1000 TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; // 频率约1kHz-10kHz (可听范围) TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); // 4.初始化电机输出比较单元(OC) TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比0% TIM_OC2Init(TIM2, &TIM_OCInitStructure); // 电机通道1 TIM_OC3Init(TIM2, &TIM_OCInitStructure); // 电机通道2 // 4.初始化蜂鸣器输出比较单元(OC) TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; // 低电平触发 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比0% TIM_OC2Init(TIM3, &TIM_OCInitStructure); // 蜂鸣器通道 //5.启动定时器 TIM_Cmd(TIM2, ENABLE); TIM_Cmd(TIM3, ENABLE); } // 电机PWM控制函数 - 保持原有 void PWM_SetCompare2(uint16_t Compare) { TIM_SetCompare2(TIM2, Compare); // 电机通道1 } void PWM_SetCompare3(uint16_t Compare) { TIM_SetCompare3(TIM2, Compare); // 电机通道2 } // 蜂鸣器PWM控制函数 - 新增 void PWM_SetBuzzerFrequency(uint16_t frequency) { // 根据频率计算周期 uint16_t period = 72000000 / frequency / 72; // 72MHz / 72 = 1MHz // 设置TIM3周期 TIM3->ARR = period - 1; } void PWM_SetBuzzerDutyCycle(uint8_t dutyCycle) { // 计算占空比值 uint16_t pulse = (TIM3->ARR + 1) * dutyCycle / 100; // 设置TIM3占空比 TIM_SetCompare2(TIM3, pulse); } Rebuild started: Project: Project *** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin' Rebuild target 'Target 1' assembling startup_stm32f10x_md.s... compiling stm32f10x_cec.c... compiling stm32f10x_crc.c... compiling stm32f10x_adc.c... compiling stm32f10x_can.c... compiling system_stm32f10x.c... compiling misc.c... compiling stm32f10x_dbgmcu.c... compiling stm32f10x_dac.c... compiling stm32f10x_bkp.c... compiling core_cm3.c... compiling stm32f10x_dma.c... compiling stm32f10x_exti.c... compiling stm32f10x_flash.c... compiling stm32f10x_fsmc.c... compiling stm32f10x_gpio.c... compiling stm32f10x_iwdg.c... compiling stm32f10x_i2c.c... compiling stm32f10x_pwr.c... compiling stm32f10x_rtc.c... compiling stm32f10x_rcc.c... compiling stm32f10x_sdio.c... compiling stm32f10x_spi.c... compiling stm32f10x_wwdg.c... compiling stm32f10x_usart.c... compiling stm32f10x_tim.c... compiling Delay.c... compiling Led.c... compiling key.c... compiling PWM.c... compiling OLED.c... compiling Motor.c... compiling SmartCar.c... compiling Serial.c... compiling HCSR04.c... compiling Servo.c... compiling Buzzer.c... Hardware\Buzzer.c(15): warning: #223-D: function "Buzzer_off" declared implicitly Buzzer_off(); Hardware\Buzzer.c(23): error: #159: declaration is incompatible with previous "Buzzer_off" (declared at line 15) void Buzzer_off(void) Hardware\Buzzer.c(34): warning: #223-D: function "PWM_SetBuzzerFrequency" declared implicitly PWM_SetBuzzerFrequency(frequency); Hardware\Buzzer.c(35): warning: #223-D: function "PWM_SetBuzzerDutyCycle" declared implicitly PWM_SetBuzzerDutyCycle(50); // 50%占空比 Hardware\Buzzer.c(31): warning: #177-D: variable "period" was declared but never referenced uint16_t period = 72000000 / frequency / 2; // 假设系统时钟为72MHz Hardware\Buzzer.c: 4 warnings, 1 error compiling LineWalking.c... compiling DHT11.c... compiling ADC.c... compiling systick.c... compiling main.c... compiling stm32f10x_it.c... ".\Objects\Project.axf" - 1 Error(s), 4 Warning(s). Target not created. Build Time Elapsed: 00:00:05代码问题
06-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值