STC15单片机 UART / SPI 管脚切换

在不同的项目中,MCU的IO管脚由于布线等差异会做调整,因此硬件UART/SPI等管脚也需要重新配置。现将STC15单片机的UART/SPI管脚切换配置记录如下,【其它型号的MCU切换方法和代码相同(或类似),具体对应的管脚以MCU的数据手册为准】。

STC15单片机 UART /SPI 管脚切换配置 

1、(头文件及)常量定义

#include "stc15.h"

#define FOSC 11059200L          //系统频率
#define BAUD 115200             //串口波特率

//-----uart相关常量定义----------------------------------------
#define NONE_PARITY     0       //无校验
#define ODD_PARITY      1       //奇校验
#define EVEN_PARITY     2       //偶校验
#define MARK_PARITY     3       //标记校验
#define SPACE_PARITY    4       //空白校验

#define PARITYBIT NONE_PARITY   //定义校验位

#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7

//-------SPI相关寄存器常量定义-------------------------------
#define    SPI_S0        0x04
#define   SPI_S1        0x08
#define    SPIF              0x80               //SPSTAT.7
#define    WCOL        0x40                //SPSTAT.6
#define    SSIG            0x80                //SPCTL.7
#define    SPEN        0x40                //SPCTL.6
#define   MSTR        0x10                //SPCTL.4

2、UART管脚切换设置

void UartSwitch(void)
{
    ACC = P_SW1;               //切换到第1组UART引脚        
    ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
    P_SW1 = ACC;                      //(P3.0/RxD, P3.1/TxD)
    
//  ACC = P_SW1;                //切换到第2组UART引脚
//  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0
//  ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
//  P_SW1 = ACC;  
//  
//  ACC = P_SW1;                //切换到第3组UART引脚
//  ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=1
//  ACC |= S1_S1;               //(P1.6/RxD_3, P1.7/TxD_3)
//  P_SW1 = ACC;  

}

3、 SPI管脚切换配置及初始化

void InitSpi()     //initial SPI
{
//    ACC = P_SW1;            //切换到第1组SPI引脚
//    ACC    &= ~(SPI_S0 | SPI_S1);  //(SPI_S0)=0, (SPI_S1)=0
//    P_SW1 = ACC;            //(P1.2/SS, P1.3/MOSI, P1.4/MISO, P1.5/SCLK)

//    ACC = P_SW1;            //切换到第2组SPI引脚
//    ACC    &= ~(SPI_S0 | SPI_S1);  //(SPI_S0)=0, (SPI_S1)=1
//    ACC |= SPI_S0;            //(P2.4/SS_2,P2.3/MOSI_2,P2.2/MISO_2,P2.1/SCLK_2)
//    P_SW1 = ACC;

    ACC = P_SW1;            //切换到第3组SPI引脚
    ACC    &= ~(SPI_S0 | SPI_S1);  //(SPI_S0)=0, (SPI_S1)=1
    ACC |= SPI_S1;            //(P5.4/SS_3,P4.0/MOSI_3,P4.1/MISO_3,P4.3/SCLK_3)
    P_SW1 = ACC;


    SPSTAT = SPIF | WCOL;
    SS = 1;
    SPCTL = SSIG | SPEN |MSTR;
}

4、UART初始化举例 


void Uart1Init()
{
    SCON = 0x50;
    T2L = BRT;
    T2H = BRT >> 8;//定时器2
    AUXR = 0x15;
    wptr = 0x00;
    rptr = 0x00;
    busy = 0;
    ES = 1;
}

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值