首先配置env工具,選擇spi驅動。 spi 一般用4根線表示通訊cs 、mosi、miso、clk.其中降低時鐘頻率,通過片選,可以掛載更多的裝置。另乙個重要的就是cpol,cpha.cpol表示時鐘訊號的起始電平,當cpol等於 0時,起始電平為低電平,當cpol等於1時,起始電平為高電平。cpha表示第幾個時鐘沿獲取資料,當cpha等於0時,表示第乙個時鐘沿獲取資料,當等於1時,表示第二個時鐘沿獲取資料。
1.rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char device_name, gpio_typedef cs_gpiox, uint16_t cs_gpio_pin); 如果是rt-thread/bsp/stm32 目錄下的 bsp, 則可以使用此函式掛載 spi 裝置到匯流排
2.如果是其他bsp的stm32 則使用rt_err_t rt_spi_bus_attach_device(struct rt_spi_device *device,const char *name, const char *bus_name, void *user_data);
下面就此兩個分別兩個示例,目標器件w25q64 匯流排spi2;
使用第乙個
#include
#include
#define w25q_spi_device_name "spi20"
static
intrt_hw_spi_flash_init
(void
)msh_cmd_export
(rt_hw_spi_flash_init, rt_hw_spi_flash_init)
;static
void
spi_w25q_sample()
;/* 查詢 spi 裝置獲取裝置控制代碼 */
spi_dev_w25q =
(struct rt_spi_device *
)rt_device_find
(w25q_spi_device_name);if
(!spi_dev_w25q)
else
}int
main
(void
)
第二個例子
#include
#include
#include
#include
"string.h"
#define spi_bus_name "spi2"
/* spi匯流排名稱 */
#define spi_w25q64_device_name "spi20"
/* spi裝置名稱 */
struct stm32_hw_spi_cs
;rt_uint8_t w25x_read_id =
0x90
;static
struct rt_spi_device spi_dev_w25q64;
static
struct stm32_hw_spi_cs spi_cs;
rt_err_t w25q64_write_cmd
(const rt_uint8_t cmd)
;rt_spi_send_then_recv
(&spi_dev_w25q64,
&cmd,
1, id,5)
;rt_kprintf
("use rt_spi_send_then_recv() read w25q id is:%x%x\n"
, id[3]
, id[4]
);}static
intrt_hw_w25q64_config
(void
)/* config spi */
return rt_eok;
}void
test()
intmain()
驅動學習 字元裝置驅動總結
字元裝置是 3 大類裝置 字元裝置 塊裝置和網路裝置 中較簡單的一類裝置,其驅動程式中完成的主要工作是初始化 新增和刪除 cdev 結構體,申請和釋放裝置號,以及填充file operations結構體中的操作函式,實現file operations結構體中的read write 和ioctl 等函...
MOSFET驅動電路總結
中心議題 mos管種類和結構 mos管導通特性 mos開關管損失 mos管驅動 mos管應用電路 在使用mos管設計開關電源或者馬達驅動電路的時候,大部分人都會考慮mos的導通電阻,最大電壓等,最大電流等,也有很多人僅僅考慮這些因素。這樣的電路也許是可以工作的,但並不是優秀的,作為正式的產品設計也是...
Linux驅動學習總結
本人剛學linux驅動不久,把這段時間學習的一些總結體會寫出來,以起到拋磚引玉的作用,根據學習的加深,我會持續寫出來。1.如果要對裝置進行有讀寫控制,字元裝置要實現cdev結構,塊裝置要實現gendisk結構。2.驅動模型提供標準的通用的管理裝置的框架 方法,把我們的驅動按照驅動模型的框架來構造,方...