我想借助在线资源来学习嵌入式系统,但是我发现这非常困难。我对如何使用自动生成的API有一些疑问?我在stm32cubeIDE上使用nucleo-f446re开发板。在进行了许多在线讲座之后,例如,我能够理解,如果必须初始化GPIO引脚,则必须使用下面的代码序列,如下所示:
int main(void)
{
HAL_Init();
SystemClockConfig();
GPIO_Init(); // High Level GPIO Initialization
while(1);
return 0;
}
void GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef ledgpio;
ledgpio.Pin = GPIO_PIN_5;
ledgpio.Mode = GPIO_MODE_OUTPUT_PP;
ledgpio.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA,&ledgpio);
}
void SystemClockConfig(void)
{
}
如GPIO_Init函数所示,使用了一系列API和Handler函数。我的问题是,我应该继续记住使用的API和处理程序的顺序,并对其他外围设备(如Timers,Uart,CAN,PWM等)执行类似的操作,还是有其他方法?另外,如果我使用其他微控制器,用于与上述相同的事物的API的顺序是否会相似或相差很多?请指导。
“在嵌入式系统”
使用定冠词是不合适的-没有一个嵌入式平台,API或框架。
在你的问题中,“自动生成的API”是ST的STM32CubeMX框架的特殊功能。初始化序列和API特定于STM32和CubeMX / STM32 HAL API。当然,它不是STM32的唯一API-你可以直接在STM32xxxx.h定义的寄存器级别对其进行编程,可以使用标准外设库(在CubeMX之前为ST的SDK产品),也可以使用其他框架(例如Mbed)。
如果你针对的不是STM32,则CubeMX完全不可用-其他供应商可能会提供他们自己的专有框架-或什么都不提供。例如,ARM CMSIS是ARM Cortex M设备之间通用的API,与供应商无关。尽管Mbed适用于各种ARM目标,并且比CMSIS或CubeMX都适用于更高级别的生态系统。它由Mbed特定的COTS开发板(例如ST的Nucleo系列)提供最直接的支持。将其放在自定义硬件上的工作要稍微多一些。
如果你没有使用基于ARM的微控制器,那么Mbed也不是一种选择,并且针对ARM以外的体系结构的跨平台,多供应商框架或SDK也很少(如果有的话)。
本质上,对于裸机嵌入式系统来说,最常见的问题是通过其数据表和用户手册熟悉特定的目标,从可能的多个选项中选择一个开发工具链和SDK /库/框架,并与之一起运行。
尽管没有适用于所有嵌入式系统的通用API,但存在通用的通用原理,技术和模式,但是肯定没有通用API或硬件初始化方法。关于该主题,有各种通用的文章-在线资源往往是特定于特定的框架或体系结构的,许多在线课程也是如此(因为主题过于广泛,所以必定如此)。
我的建议是按原样继续进行,但是要知道,你所学的内容通常是嵌入式系统的一个特定而狭窄的方面,并且不要太拘泥于特定的规则并接受通用的原则。
@old_timer:尽管我很喜欢纠正拼写错误,但是如果您不介意的话,我会坚持使用英式英语拼写;-)。美国拼写法使得在拼字游戏中使用Z字比其应得的10分字母分数太容易-破坏了游戏。
我的政治家没有意识到这是英国的拼写,Cortex被弄皱了,所以当我进去的时候,我在途中右键单击了几下。
@old_timer没问题,我是双语的-英语和美国的;-)
现在这取决于计算机,站点或其他东西,这已经很有意义了,这些年来我已经看过z和s了,现在我怀疑我以前知道的某些单词的拼写...在计算机开始尝试提供帮助之前...最重要的是,两者都是正确的(而且都是错误的)...
从字面上看,这可能是我对其他人所做的第一次编辑,这是我打算修复的Cortex错字...