版權聲明:本文爲博主原創文章,轉載註明出處。 https://blog.csdn.net/Adrian_1/article/details/50043921
第二天學習stm32了,也是像往常一樣8點鐘到了實驗室,學習的前20天應該是有60講的視頻要看的,所以興高采烈的打開學習視頻準備看,這時老師的到來打破了我寧靜的內心啊,原本爲了沒多長時間就要開賽的藍橋杯,我要從0開始,把stm32學個大概才行,所以我放棄了複習四級(大三了四級還沒過,愁人啊)。全身心投入在這裏。可是老師過來把手中的優盤交給我讓我把相應內容拷到電腦裏。我知道噩夢來臨了,之前說的創新項目就要開始了,我必須要努力學習做項目相關的知識,因爲老師對我的保研寄予厚望,所以才臨時把我調換進來的。所以這個也是需要力爭的。老師出去之後。我這顆心就無法靜下來了。感覺好煩躁。感覺壓力好大。
今天主要會了一些stm32簡單的位操作方法,利用端口地址加上公式把對應位的函數寫出的。然後就是調用了。(現在還沒有看什麼stm32的庫啊,那個東西雖然方便使用,但是步驟繁瑣,而且感覺不太好記)
下面是一個發送數據的例子,用的就是位操作方法
#include "stm32f10x.h"
#include <stdio.h>
#define PA1 GPIOA->BSRR
#define PA0 GPIOA->BRR
#define GPIOA_ODR_A (GPIOA_BASE + 0x0C) //端口對應寄存器等於端口基址加上對應便宜地址
#define GPIOA_IDR_A (GPIOA_BASE + 0x08)
#define GPIOB_ODR_A (GPIOB_BASE + 0x0C)
#define GPIOB_IDR_A (GPIOB_BASE + 0x08)
#define GPIOC_ODR_A (GPIOC_BASE + 0x0C)
#define GPIOC_IDR_A (GPIOC_BASE + 0x08)
#define GPIOD_ODR_A (GPIOD_BASE + 0x0C)
#define GPIOD_IDR_A (GPIOD_BASE + 0x08)
#define GPIOE_ODR_A (GPIOE_BASE + 0x0C)
#define GPIOE_IDR_A (GPIOE_BASE + 0x08)
#define BitBand(Addr, BitNum) *((volatile unsigned long *)((Addr & 0xF0000000) + 0x2000000 + ((Addr & 0xfffff) << 5) + (BitNum << 2))) //轉位操作 公式
#define PAout(n) BitBand(GPIOA_ODR_A, n)//對應端口的第n位
#define PAin(n) BitBand(GPIOA_IDR_A, n)
#define PBout(n) BitBand(GPIOB_ODR_A, n)
#define PBin(n) BitBand(GPIOB_IDR_A, n)
#define PCout(n) BitBand(GPIOC_ODR_A, n)
#define PCin(n) BitBand(GPIOC_IDR_A, n)
#define PDout(n) BitBand(GPIOD_ODR_A, n)
#define PDin(n) BitBand(GPIOD_IDR_A, n)
#define PEout(n) BitBand(GPIOE_ODR_A, n)
#define PEin(n) BitBand(GPIOE_IDR_A, n)
void Delay_MS(u16 dly)
{
u16 i, j;
for (i = 0; i < dly; i++)
for (j = 1000; j > 0; j--)
;
}
int main(void)
{
u8 data, i;
//PA.0鏈接 AB, PA.1鏈接Clock, PB.0鏈接clear
//使得164的QA~QB輸出:11000100
GPIOA->CRL = 0x33;
GPIOB->CRL = 0x03;
PBout(0) = 1; //clear 高電平有效
data = 0xC4; //11000100的16進制形式
for (i = 0; i < 8; i++)
{
PAout(1) = 0;
if (data & 0x01 == 0x01)
PAout(0) = 1;
else
PAout(0) = 0;
Delay_MS(1);
PAout(1) = 1;
Delay_MS(1);
data = data >> 1;
}
//1.設置引腳PA.0,PA.1,PB.0推輓輸出
//2.進行通信
return 1;
}
然後就是觀察它的波形了,根據時鐘發送的數據看看是否都正確