Zephyr uart驅動及使用方法

2021-08-19 20:41:18 字數 2880 閱讀 8429

1. 說明

參考的單板: stm32f429i_disc1

zephyr版本: zephyr v1.10.0

2. 驅動載入方法 

1) uart pinmux驅動載入

pinmux.c (boards\arm\stm32f429i_disc1) // 引腳復用驅動最上層,呼叫sys_init註冊驅動

static const struct pin_config pinconf = ,

,#endif  /* config_uart_stm32_port_1 */

};pinmux_stm32_init(struct device *port)

stm32_setup_pins(pinconf, array_size(pinconf))   // pinmux_stm32.c (drivers\pinmux\stm32), 該檔案為通用stm32引腳復用驅動

_pinmux_stm32_set

enable_port(stm32_port(pin), clk)

stm32_pin_configure(pin, func, func & stm32_afr_mask);// soc_gpio.c (arch\arm\soc\st_stm32\stm32f4), gpio配置最底層函式,直接操作暫存器

//soc_gpio.c包含如下函式

int stm32_gpio_configure(u32_t *base_addr, int pin, int conf, int altf)

int stm32_gpio_set(u32_t *base, int pin, int value)

int stm32_gpio_get(u32_t *base, int pin)

int stm32_gpio_enable_int(int port, int pin)

/* 驅動載入 */

sys_init(pinmux_stm32_init, pre_kernel_1, config_pinmux_stm32_device_initialization_priority);

2) uart 驅動載入

uart_stm32.c (drivers\serial)

/* uart驅動api函式示例 */

static int uart_stm32_poll_in(struct device *dev, unsigned char *c)

*c = (unsigned char)ll_usart_receivedata8(uartinstance);

return 0;

}/* 以下為uart 驅動api函式,它們將呼叫stm32f4xx_ll_usart.h (ext\hal\st\stm32cube\stm32f4xx\drivers\include)中的uart操作函式,

並呼叫stm32l4xx.h (ext\hal\st\stm32cube\stm32l4xx\soc)中的巨集直接操作暫存器,完成uart資料收發等操作 */

static const struct uart_driver_api uart_stm32_driver_api = ;

/* uart 初始化 */

static int uart_stm32_init(struct device *dev)

#define uart_device_init_stm32(type, n, apb)\

stm32_uart_irq_handler_decl(n);\

\static const struct uart_stm32_config uart_stm32_dev_cfg_##n = ,\

stm32_clock_uart(type, apb, n),\

};\\

static struct uart_stm32_data uart_stm32_dev_data_##n = \

}\};\

\device_and_api_init(uart_stm32_##n, config_uart_stm32_port_##n##_name,\

&uart_stm32_init,/* uart 初始化,設定時鐘波特率,資料位等 */\

&uart_stm32_dev_data_##n, &uart_stm32_dev_cfg_##n,\

pre_kernel_1, config_kernel_init_priority_device,\

&uart_stm32_driver_api); /* uart 驅動api */\

\stm32_uart_irq_handler(n)

#ifdef config_uart_stm32_port_1   // 如果定義config_uart_stm32_port_1,則載入uart1的驅動

uart_device_init_stm32(usart, 1, apb2)

#endif/* config_uart_stm32_port_1 */

3. 使用方法

1) 配置

# stm32f429i_disc1_defconfig (boards\arm\stm32f429i_disc1)

# enable usart1 - passthrough to stlink v2 connector

config_uart_stm32_port_1=y

# enable pinmux

config_pinmux=y

//stm32f429i_disc1.dts (boards\arm\stm32f429i_disc1)5662017/12/9

/ ;};

/* uart 配置 */

&usart1 ;

2) 使用

直接呼叫printk/putc/puts/fputs等函式

驅動及驅動程式的作用

驅動程式 驅動程式是硬體廠商根據作業系統編寫的配置檔案,是新增到作業系統中的一小塊 其中包含有關硬體裝置的資訊。當你安裝新硬體時,驅動程式是一項不可或缺的元件。可以說沒有驅動程式,計算機中的硬體就無法工作。有了驅動程式中的這些資訊,計算機就可以與裝置進行通訊。作業系統不同,硬體的驅動程式也不同,各個...

mongo分片及驅動

在三颱機器上如下配置,其中檔名稱,ip,埠可作相應更改。1 拷貝程式到 opt 下,建立分片配置檔案。shard21.conf dbpath data shard21 logpath data shard21.log pidfilepath opt mongodb shard21.pid direc...

Fastboot驅動及安裝

手機可以進入fastboot模式,開發板通過暫停啟動,輸入fastboot也可以進入fastboot模式。有些cpu是需要fastboot,有些不需要。首先我們需要了解哪些手機需要安裝fastboot驅動 小公尺 華為等廠商手機採用的高通 海思 英偉達處理器屬於fastboot平台,需要安裝fast...