(1)GPIO---按键的读取(输入)
按键编程步骤:
1》打开时钟----GPIOA
2》初始化GPIOA0
----上拉输入
----GPIO_Pin_0
3》判断PA0是否等于0
4》如果等于0,延时30--50ms,消除抖动
5》再次判断PA0是否等于0
6》如果等于0,等待PA0等于1,等待按键抬起
7》执行相应按键按下对应的操作
---------------------------------------------------
(2)通信方式----USART----串口通信
1》USART 同步/异步通信设备
UART 异步通信设备
2》同步:在同步时钟线的牵引下,收发数据需要同时进行
异步:接收器只管接收,发送器只管发送,接收和发送互不影响
3》全双工:同一时刻既可以收数据,也可以发送数据
半双工:同一时刻,只能收数据,或者是发数据,数据可逆
单工:只能朝一个方向
4》串行:数据是按bit发送,一位一位的发送或接受
并行:数据是以字节为单位一次性发送或接收
5》USART是全双工,同步异步可选择的,串行的通信方式,它一般用 于两台设备之间的通信
6》串口的作用:
1,用于设备之间的通信
2,可以用于设备调试-----printf
7》波特率是每秒发送数据位数
8》USART一帧完整的数据(数据包):起始位(低电平),数据位(发送数据寄存器中的8个数据),校验位,停止位(高电平)
校验位:两种方式---奇校验和偶校验
奇校验:数据位中1的个数为奇数时,校验位为1,偶数时,校验位为0
偶校验:数据位中1的个数为奇数时,校验位为0,偶数时,校验位为1
9》串口信号,也叫做TTL信号、
CH340作用:它是一个能将USB信号转化成串口信号,也能将串口信号,转化成USB信号的一个芯片。
10》通常情况下,串口的数据位都为8bit,如果选择数据位是9位,那就是包含奇偶校 验位
11》在stm32f103rct6中有3个USART,有2个UART
12》实现STM32与电脑的串口通信,编程步骤
1,打开时钟
----GPIOA
----AFIO
----串口
2,初始化GPIO
----PA9
---复用推挽输出
---10MHz
----PA10
---浮空输入
3,串口的初始化
----波特率--115200
----数据位数--8bit
----停止位 --1个
----校验位 --无
----硬件流控 --无
----TX和RX是否使能 --使能
4,使能串口1
5,发送和接收数据
// 5,串口发送和接收数据
if(SET==USART_GetFlagStatus(USART1,USART_FLAG_RXNE)){ //判断是否接收到了数据
USART_ClearFlag(USART1,USART_FLAG_RXNE); //清除标志位
USART_SendData(USART1,USART_ReceiveData(USART1));//将接收到的数据发出来
}
13》如果要使用printf,需做以下两件事情:
1,重定向-----从屏幕输出切换到串口输出----重写fputc函数
int fputc(int ch,FILE *f)
{
USART_SendData(USART1, ch);
while(SET !=USART_GetFlagStatus(USART1,USART_FLAG_TXE));
USART_ClearFlag(USART1,USART_FLAG_TXE);
return ch;
}
2,使用微库
魔术棒--->target--->Use MicroLib 打勾
14》如果在使用printf时,发现第一个字节没有打印---
在USART1_Config()加入以下程序:
USART_ClearFlag(USART1,USART_FLAG_TXE);
(三)STM32的中断系统
1》轮询系统
while(1){
“依次执行”
}
2》前后台系统
轮询系统+中断
3》STM32中有一个专门用于管理中断的器件-----NVIC
每一个中断都有抢占优先级和响应优先级
抢占优先级(主优先级):具备抢占的功能,高优先级能够抢占低优先级
响应优先级(次优先级):不具备抢占功能,只有当两个同主优先级同时发生时,高优先级先执行
4》在STM32中,中断优先级按组划分,分成0----4,由4个bit来区分
5》所有中断服务函数,函数名是固定的,在启动文件中
6》 [WEAK]有这个标志的函数,代表是一个弱属性的函数,特点:你可以在外部写一个同名函数
如果你写了,执行你写的,如果你没写,执行弱属性的函数
7》B . 相当于while(1),所以,当你配置了中断源,打开了中断,就必须编写中断服务函数
给串口1的接收寄存器非空事件配置中断
9》中断优先级分组的函数
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
10》配置中断源的函数
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
11》利用NVIC设置中断源的中断优先级
1,中断通道号----在stm32f10x.h这个头文件中找
2,主优先级
3,子优先级
4,使能
NVIC_Init(NVIC_InitTypeDef * NVIC_InitStruct)
12》中断服务函数
void USART1_IRQHandler(void)
{
if(SET==USART_GetITStatus(USART1,USART_IT_RXNE)){
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
USART_SendData(USART1,USART_ReceiveData(USART1));//将接收到的数据发出来
}
}