第二天学习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;
}
然后就是观察它的波形了,根据时钟发送的数据看看是否都正确