f103按键的读取/串口通信/中断系统

(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));//将接收到的数据发出来
            }
        }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Lewis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值