STM32F407 讀取光敏模組的AO和DO

2021-09-24 13:31:08 字數 3300 閱讀 9750

同事買到的光敏模組和以前用的不一樣,他用萬用表量來量去的,看的挺繁瑣。

寫個測試程式,來測試光敏模組的數值和光線的關係。

原子探索者407

見main.c

前幾天,搭了乙個ucos-iii的模板,就在這個模板中做實驗。

全部新加的實現,都搬到了main.c.

// @file \src\test_case\test_photosensitive_sensor\ucos-iii_test_photosensitive_sensor\user\main.c

// @brief 測試讀取光敏模組的ao和do, 在mdk的序列除錯視窗列印出來

// // @note - 實驗環境

// 實驗平台 : 原子探索者f407

// 光敏模組url :

// 光敏模組資料 : 提取碼 : qqtv

//// @note - 使用的cpu資源

// led燈資源 : led0 = pf9, led1 = pf10 (探索者板載led)

// adc模擬量轉數字量輸出 : pf7 (用杜邦線接到引出的io)

// adc開關量輸出 : e5 (調節電位器門限, 可以得到和光線強度對應的門限值, do = 0/1) (用杜邦線接到引出的io)

// 光敏模組的vcc接開發板3.3v引出排針

// 光敏模組的gnd接開發板gnd引出排針

//// @note - 實驗結論

// 光線暗時,從adc讀出的數值大, 約為2000

// 光線亮時, 從adc讀出的數值小, 約為500

// 調節電位器, 可以得到乙個何時的值, 當光線暗到一定值時,使光敏模組的do的開關量發生變化

// // @note - 執行結果

//

/*>> main

>> start_task

??d out = 0 // 這裡是自然光線照射下, do = 0, ao 數值較小

?? ao = 534

??d out = 0

?? ao = 523

??d out = 0

?? ao = 538

??d out = 0

?? ao = 532

??d out = 0

?? ao = 529

??d out = 0

?? ao = 534

??d out = 0

?? ao = 538

??d out = 0

?? ao = 531

??d out = 0

?? ao = 529

??d out = 0

?? ao = 526

??d out = 0

?? ao = 529

??d out = 0

?? ao = 480

??d out = 0

?? ao = 516

??d out = 0

?? ao = 699

??d out = 1 // 這裡是用手捂住光敏電阻時, do = 1, ao 數值變大

?? ao = 917

??d out = 1

?? ao = 1161

??d out = 1

?? ao = 1447

??d out = 0

?? ao = 438

??d out = 0

?? ao = 451

??d out = 0

?? ao = 487

??d out = 0

?? ao = 486

??d out = 0

?? ao = 495

*/#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "led.h"

#include "includes.h"

//任務優先順序

#define start_task_prio 3

//任務堆疊大小

#define start_stk_size 512

//任務控制塊

os_tcb starttasktcb;

//任務堆疊

cpu_stk start_task_stk[start_stk_size];

//任務函式

void start_task(void *p_arg);

// led初始化

void led_init(void);

// 開關量輸入初始化

void switch_input_init(void);

// 光敏模組初始化

void lsens_init(void);

void adc3_init(void);

u32 lsens_get_val(void);

u16 get_adc3(u8 ch);

int main(void)

#define get_val_switch_input() gpio_readinputdatabit(gpioe,gpio_pin_5) //pe5

//開始任務函式

void start_task(void *p_arg)

else if (1 == get_val_switch_input()) else

adcx=lsens_get_val();

printf("光敏 ao = %d\n", adcx); }}

void switch_input_init(void)

void led_init(void)

void lsens_init(void)

void adc3_init(void)

#define lsens_read_times 3 //定義光敏感測器讀取次數,讀這麼多次,然後取平均值

u32 lsens_get_val(void)

temp_val/=lsens_read_times;//得到平均值

return temp_val;

}//獲得adc值

//ch:通道值 0~16 adc_channel_0~adc_channel_16

//返回值:轉換結果

u16 get_adc3(u8 ch)

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

STM32F407上除錯freeRTOS問題

是在正點原子的阿波羅stm32f429開發板上的例子改來的,他們的編譯沒有問題,我編譯時出現如下問題 定位到出錯的地方,是 再追 configmax syscall interrupt priority 的定義是 define configmax syscall interrupt priority...

STM32F407 驅動外部SRAM

需要驅動的sram型號為is61lv25616al,價效比比51216的高很多 配置cubemx 這幾個時序比較關鍵,可以按照手冊來計算,我用下來這幾個數值比較合適。然後就沒有然後了,生成 就可以用了。檢查sram內容是否正確 uint8 t bsp testextsram void 寫sram p...