我最近在學stm32,想和大家分享自己的學習成果,也和大家一起學習交流。之前學習過15的庫函數的套用,經過一段時間摸索,我對stm32的使用有了基礎的了解。因為板子不是正點原子和野火,所以有些不同。 每個板子視頻教學第一個介紹都是stm32的gipo口的介紹,這個io口跟51的io口定義全然不同,并且能配置自身頻率,而且有些定義用到了結構體。而且stm32是32位的單片機,內部的32位寄存器太多,很難記住,所以建議使用庫函數的辦法,先學會套用,后來在更改參數或者做一些小項目的時候,對一些寄存器做一些更深入的理解。
首先我們講一下gipo口void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //調用結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); //定義時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //定義哪個口輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //輸出速率為50Mhz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //定義為推挽輸出
GPIO_Init(GPIOG, &GPIO_InitStructure); //調用庫函數配置io口
GPIO_SetBits(GPIOG,GPIO_Pin_6); //置一服務
}
這個截圖你能看見這個是定義一個stm32的io口的操作過程,這個地方使用了結構體,可以看到,這樣使調用更加明了。這里定義了io的pa時鐘,配置的是哪一個io口,輸出速率,輸出是推挽輸出。這些參數,集合在一個函數中,使用更加明了簡捷。感覺很方便。
我提供一個燈亮小燈的程序。可以參考一下,有啥問題可以一起學習。我建了個群912803408.可以交流
單片機源程序如下:
- /*****
- ** Descriptions:配置PG6為輸出,驅動開發板上的LED指示燈D1以200毫秒的間隔閃爍
- **--------------------------------------------------------------------------------------------*/
- #include "stm32f10x.h"
- //delay這里報錯的原因是:delay函數用匯編實現的,導致了MDK誤報。
- #include "delay.h"
- /***************************************************************************
- * 描 述 : 初始化單片機控制D1的引腳PG6,并將D1的初始狀態設置為熄滅
- * 參 數 : 無
- * 返回值 : 無
- **************************************************************************/
- void led_init(void)
- {
- //定義IO初始化配置結構體
- GPIO_InitTypeDef GPIO_InitStructure;
- //打開PA端口時鐘
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
-
- //配置的IO是PG6
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- //IO口速度為50MHz
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- //配置為通用推挽輸出
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- //調用庫函數GPIO_Init()配置IO
- GPIO_Init(GPIOG, &GPIO_InitStructure);
- //設置D1初始化狀態為熄滅
- GPIO_SetBits(GPIOG,GPIO_Pin_6);
- }
- /***************************************************************************
- * 描 述 : 主函數
- * 參 數 : 無
- * 返回值 : 無
- **************************************************************************/
- int main(void)
- {
- //初始化用于驅動指示燈D1的引腳PG6
- led_init();
- //主循環
- while(1)
- {
- //調用庫函數GPIO_ResetBits()驅動LED指示燈D1的引腳(PG6)輸出低電平,即點亮D1
- GPIO_ResetBits(GPIOG,GPIO_Pin_6);
- //軟件延時200ms
- sw_delay_ms(200);
- //調用庫函數GPIO_SetBits()驅動LED指示燈D1的引腳(PG6)輸出高電平,即熄滅D1
- GPIO_SetBits(GPIOG,GPIO_Pin_6);
- //軟件延時200ms
- sw_delay_ms(200);
- }
- }
- /********************************************END FILE********************/
復制代碼
所有資料51hei提供下載:
led.7z
(192.91 KB, 下載次數: 6)
2020-7-7 19:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|