如何使用适用于2个微控制器的嵌入式C语言为嵌入式系统编写可移植代码?

Ran*_*wan 1 c embedded microcontroller stm32f4

我有 STM32F4 DISC-1 的 UART 代码,我希望它也能在其他微控制器上工作。如何开始?

Lun*_*din 5

您需要在驱动程序之上编写硬件抽象层(HAL) 1) ,以便无论使用什么MCU,都可以保持相同的调用者代码、更高层协议处理等。类似于(伪代码):

// uart.h

void uart_init ( /* system_clock, desired baudrate, stop bits etc */)

uart_err_t uart_send (const uint8_t* data, size_t size);

uart_err_t uart_receive (uint8_t* data, size_t buf_size, size_t* bytes_received);
Run Code Online (Sandbox Code Playgroud)

等等。每个MCU的驱动程序都实现了上述功能。这需要位于所有低级内容之上,例如中断、环形缓冲区或 DMA,这些内容需要在驱动程序内部进行处理。上述函数应该是中断安全的 setter/getter。


1)不要与 ST 的所谓“HAL”膨胀软件相混淆,后者不应用于任何目的。请查看它以获取如何实现驱动程序的提示,但不要按原样使用其代码。