前言
本系列文章統(tǒng)一圍繞STM32F103C8T6最小系統(tǒng)開發(fā)板進(jìn)行記錄跳座,如涉及其他開發(fā)板將會(huì)特別說明饮戳。
LED
工作原理
STM32F103C8T6最小系統(tǒng)開發(fā)板上LED原理圖如下:
LED
- 引腳:PC13
- 工作方式:低電平點(diǎn)亮
配置思路
- 開啟時(shí)鐘:GPIOC
- 配置初始化結(jié)構(gòu)體參數(shù)
- 引腳:PC13
- 輸出速度:50MHz
- 輸出模式:推挽輸出
- 初始化GPIO。
- 操作:控制or讀取狀態(tài)怔鳖。
代碼
LED初始化函數(shù)
void led_gpio_init(void)
{
GPIO_InitTypeDef led;
// 開啟GPIOC時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// 配置PC13參數(shù)
led.GPIO_Pin = GPIO_Pin_13;
led.GPIO_Mode = GPIO_Mode_Out_PP;
led.GPIO_Speed = GPIO_Speed_50MHz;
// 調(diào)用GPIO初始化函數(shù)
GPIO_Init(GPIOC, &led);
// 初始化LED關(guān)
GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
}
LED控制函數(shù)
對(duì)LED進(jìn)行操作并讀取其當(dāng)前狀態(tài):輸出低電平時(shí)LED點(diǎn)亮,輸出高電平時(shí)LED關(guān)閉。
u8 led_ctl(u8 op)
{
GPIO_WriteBit(LED_GPIO_PORT, LED_GPIO_PIN, op);
return GPIO_ReadOutputDataBit(LED_GPIO_PORT, LED_GPIO_PIN);
}
繼電器
繼電器實(shí)現(xiàn)的控制電路優(yōu)點(diǎn):
- 用低電壓控制高電壓
- 遠(yuǎn)距離控制
- 自動(dòng)控制
工作原理
通常一個(gè)基本的繼電器模塊有著以下引腳:
image.png
- COM:公共端
- NC(normal closed):常閉端
- NO(normal open):常開端
- VCC:電源輸入
- GND:地
- Signal:信號(hào)輸入宽气,可連接GPIO引腳。
jpg
工作方式:
- 當(dāng)輸入信號(hào)為高電平時(shí)潜沦,COM與NC端相連萄涯。
- 當(dāng)輸入信號(hào)為低電平時(shí),COM與NO端相連止潮。
默認(rèn)COM與NO端相連窃判,可通過萬用表通斷檔測(cè)量判斷。
接線
實(shí)驗(yàn)?zāi)康模和ㄟ^對(duì)繼電器的控制喇闸,實(shí)現(xiàn)對(duì)LED的開關(guān)控制袄琳。
- COM:連接開發(fā)板GND腳。
- NC:連接開發(fā)板PC13引腳燃乍,以對(duì)LED進(jìn)行控制唆樊。
- Signal:連接開發(fā)板IO引腳,進(jìn)行高低電平的輸出刻蟹。
工作原理:繼電器默認(rèn)COM與NO相連逗旁,當(dāng)開發(fā)板IO引腳輸出高電平給繼電器時(shí),繼電器COM與NC相連,即PC13輸出低電平片效,LED會(huì)被點(diǎn)亮红伦。
繼電器接線
配置思路
- 開啟時(shí)鐘:GPIOB
- 配置初始化結(jié)構(gòu)體參數(shù):
- 引腳:PB9
- 輸出速度:50MHz
- 輸出模式:推挽輸出
- 初始化GPIO。
- 控制操作:控制or讀取狀態(tài)淀衣。
代碼
繼電器初始化函數(shù)
void relay_gpio_init(void)
{
GPIO_InitTypeDef relay;
// 開啟GPIOC時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 配置PC13參數(shù)
relay.GPIO_Pin = GPIO_Pin_9;
relay.GPIO_Mode = GPIO_Mode_Out_PP;
relay.GPIO_Speed = GPIO_Speed_50MHz;
// 調(diào)用GPIO初始化函數(shù)
GPIO_Init(GPIOB, &relay);
return ;
}
繼電器控制函數(shù)
u8 relay_ctl(u8 op)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_9, op);
return GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_9);
}