基于STM32的12864串行时序的实现

     12864液晶并口驱动程序用的比较多,但是考虑到有的时候单片机或者MCU的IO口有限时就可以使用串行驱动方法。以下是12864液晶串行时序图,下面就根据这个图来分析一下12864串行时序的实现,只有真正弄清楚了时序图才能真正了解串行传输的原理。


    

    从图上可以看出串行传输时需要用到CS,SCLK,SID三根信号线,但是由于CS是高电平有效,所以也可以把CS长接高电平,那样就只需要两根线就OK了,当然当使用12864串行模式时,PSB引脚必须接低电平,复位RST引脚可以悬空不接,因为12864内部有上电复位电路。

  由于数据是传输是以一个字节8bits为单位,所以下面贴出传输一个字节的函数实现

void Write_8bits(uint W_bits)
{
 uint i,Temp_data;
 for(i=0; i<8; i++)//总共移动八次,就可以把8bits数据全部传完
 {
  Temp_data = W_bits;
  Temp_data <<= i;//把数据依次左移
  if((Temp_data&0x80)==0)  //判断对应位是否为0
  {
   CLRSID;// SID = 0;
   CLRSCLK;//SCLK = 0;//在时钟的下降沿把数据传输出去
   SETSCLK;// SCLK = 1;//置高电平,为下次传输做准备
  }
  else         //对应位为1
  {
   SETSID;//SID = 1;
   CLRSCLK;//SCLK = 0;
   SETSCLK; //SCLK = 1;
  }
 }
}

    从时序图上可以看出,要想完整的把一个字节的数据传出去,需要传送三次才能实现,也就是需要传送三个字节,这三个字节分别是:命令控制字,字节的高四位+低四位0组成的字节,字节的低四位+高四位0组成的字节。

                                                                    命令控制字11111RWRS0

    RW代表读还是写液晶,为0代表写,为1代表读。RS代表写命令还是数据,为0代表写命令,为1代表写数据,其余6位固定。所以假设要向液晶写数据,就必须首先发送11111010,写命令就发送11111000。

  下面是程序的具体实现,这是关键!

void W_1byte(uchar RW, uchar RS, uchar W_data)
{ 
 uint H_data,L_data,S_ID = 0xf8;  //11111RWRS0
 if(RW == 0)
 {
   S_ID &=~ 0x04;
 }
 else     //if(RW==1)
 {
   S_ID |= 0X04;
 }
 if(RS == 0)
 {
   S_ID &=~ 0x02;
 }                                                                                                                               
 else     //if(RS==1)
 {
   S_ID |= 0X02;
 }
//以上是根据读写命令以及是发送数据还是命令来组合命令字
 H_data = W_data;
 H_data &= 0xf0;   //屏蔽低4位的数据
 L_data = W_data;    //xxxx0000格式
 L_data &= 0x0f;   //屏蔽高4位的数据
 L_data <<= 4;   //xxxx0000格式
 SETCS;//CS = 1; 时能发送
 Write_8bits(S_ID);   //发送命令字S_ID
 Write_8bits(H_data); //发送H_data
 Write_8bits(L_data); //发送L_data
 CLRCS;//CS=0   
}   
//写入字符串
 void LCD_write_string(uchar *s)
{
  for(uint i=0;s[i]!='\0';i++)
      W_1byte(0,1,s[i]);
}
 
 
//液晶初始化函数                                                                                                                                     
void LCD_Init_12864(void)//液晶初始化程序
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  CLRPSB;//PSB=0 串行模式
 OSTimeDly (40);//关于这个延时根据使用的单片机来决定我这里使用STM32 所以要加延时
 W_1byte(0,0,0x30);//功能设置 8位数据,基本指令 
 OSTimeDly (40);
 W_1byte(0,0,0x02); //地址归位
  OSTimeDly (40);
 W_1byte(0,0,0x06); //游标及显示右移一位
  OSTimeDly (40);
 W_1byte(0,0,0x0c); //显示状态 ON,游标OFF,反白OFF
  OSTimeDly (40);
 W_1byte(0,0,0x01);  //清除显示
  OSTimeDly (40);
 W_1byte(0,0,0x81);//设置写入地址
 LCD_write_string("STM32 ADC");
}
 //附上一个实用的程序:把数字转换成字符串,n是转换的精度,即是字符串'.'后有几位小数
//有的时候要把AD采样得到的浮点型转换成字符串在液晶上显示,这个函数就非常有用
int ftoa(char *str, float num, int n) 
{
    int     sumI;
    float   sumF;
    int     temp;
    int     count = 0;
    char *p;
    char *pp;
    if(str == NULL) return -1;
    p = str;
   
    if(num < 0)
    {
        num = 0 - num;
    }
    sumI = (int)num;    //sumI is the part of int
    sumF = num - sumI;  //sumF is the part of float
   
    do
    {
        temp = sumI % 10;
        *(str++) = temp+48;
    }while((sumI = sumI /10) != 0);
    pp = str;
    pp--;
    while(p < pp)
    {
        *p = *p + *pp;
        *pp = *p - *pp;
        *p = *p -*pp;
        p++;
        pp--;
    }
    *(st
r++) = '.';
   
    do
    {
        tem
p = (int)(sumF*10);
        *(str++) = temp+48;
        if((++count) == n)
            break;
        sumF = sumF*10 - temp;
    }while(!(sumF > -0.000001 && sumF < 0.000001));
 *str='\0';
    return 0;
}
 
//12864.h 12864头文件
#include
#define uchar  CPU_INT08U
#define uint   CPU_INT16U
#define SETCS       GPIO_SetBits(GPIOC,GPIO_Pin_9)    //CS   PC.9
#define SETSID      GPIO_SetBits(GPIOC,GPIO_Pin_10)  //SID  PC.10
#define SETSCLK     GPIO_SetBits(GPIOC,GPIO_Pin_11) //SCLK  PC.11
#define SETPSB      GPIO_SetBits(GPIOC,GPIO_Pin_12) //PSB PC.12
#define CLRCS       GPIO_ResetBits(GPIOC,GPIO_Pin_9)
#define CLRSID      GPIO_ResetBits(GPIOC,GPIO_Pin_10)
#define CLRSCLK     GPIO_ResetBits(GPIOC,GPIO_Pin_11)
#define CLRPSB      GPIO_ResetBits(GPIOC,GPIO_Pin_12)
void W_1byte(uchar RW, uchar RS, uchar W_data);
void LCD_Init_12864(void);
int ftoa(char *str, float num, int n);
void LCD_write_string(u8 *s);
//主函数 实现功能STM32 ADC采样 在液晶上显示
#include "12864.h"
#define ADC1_DR_Address    ((uint32_t)0x4001244C)  //ADC数据寄存器的基地址
USART_InitTypeDef USART_InitStructure;    //串口、ADC、DMA声明
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef DMA_InitStructure; // 注:ADC为12位模数转换器,只有ADCConvertedValue的低12位有效
 uint16_t ADCConvertedValue;
void ADC_GPIO_Configuration(void);
static void Delay_ARMJISHU(__IO uint32_t nCount)
{
  for (; nCount != 0; nCount--);
}
uchar tab1[]="0123456789";
int main(void)
{ 
 GPIO_InitTypeDef GPIO_InitStructure;
  u16 ADCConvertedValueLocal, Precent = 0, Voltage = 0;
 ADC_GPIO_Configuration(); 
 //Delay_ARMJISHU(1000000);//延时  上电复位 不然需要手动复位
   LCD_Init_12864();//液晶初始化程序
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);   //使能DMA时钟
 
  DMA_DeInit(DMA1_Channel1);    //开启DMA1的第一通道 
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;    //DMA对应的外设基地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue; //内存存储基地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //DMA的转换模式为SRC模式,由外设搬移到内存
  DMA_InitStructure.DMA_BufferSize = 1;//DMA缓存大小,1个
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //接收一次数据后,设备地址禁止后移
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; //关闭接收一次数据后,目标内存地址后移
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  //定义外设数据宽度为16位
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;  //DMA搬移数据尺寸,HalfWord就是为16位
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;   //转换模式,循环缓存模式。
  DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA优先级高
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;    //M2M模式禁用
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);         
 
 
  DMA_Cmd(DMA1_Channel1, ENABLE);
    
  ADC_GPIO_Configuration();
 
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立的转换模式 ADC_DUALMOD[3:0]=0000;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;//开启扫描模式  ADC_SCAN=1;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//开启连续转换模式  ADC_CONT=1;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//ADC外部开关,关闭状态 ; 软件转换 ADC_EXTSEL[2:0]=111;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//对齐方式,ADC为12位中,右对齐方式 ADC_ALIGN=0;
  ADC_InitStructure.ADC_NbrOfChannel = 1;//开启通道数,1个  ADC_SQR1[23:20]=0000;
 //ADC_SQR1[23:20] 设置通道数目的选择
  ADC_Init(ADC1, &ADC_InitStructure);
 
  ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_55Cycles5);
 //ADC_SMPR2 ADC_SMPR1 设置每个通道的采样时间 
 //ADC_SQR1[19:0]DC_SQR1[29:0]DC_SQR3[29:0]  设置对应通道的转换顺序  适用于多通道采样
 //ADC通道组, 第9个通道 采样顺序1,转换时间 
 
  ADC_DMACmd(ADC1, ENABLE);   //ADC命令,使能  ADC_ADON=1
 
 
  ADC_Cmd(ADC1, ENABLE);  //开启ADC1 ADC_DMA=1
    
  ADC_ResetCalibration(ADC1);   //重新校准
 
  while(ADC_GetResetCalibrationStatus(ADC1));  //等待重新校准完成
 
  ADC_StartCalibration(ADC1);  //开始校准  ADC_RSTCAL=1; 初始化校准寄存器
 
  while(ADC_GetCalibrationStatus(ADC1));    //等待校准完成  ADC_CAL=0;
    
 
  ADC_SoftwareStartConvCmd(ADC1, ENABLE); //连续转换开始,ADC通过DMA方式不断的更新RAM区。
//ADC_SWSTART=1 开始规则转换 切记 软件触发也属于外部事件  要设置  ADC_EXTTRIG=1
  while (1)
  {
    ADCConvertedValueLocal = ADCConvertedValue;
    Precent = (ADCConvertedValueLocal*100/0x1000);//算出百分比
    Voltage = Precent*33;        //3.3V的电平,计算等效电平
  W_1byte(0,0,0x91);
 W_1byte(0,1,tab1[Precent/10]); 
 W_1byte(0,1,tab1[Precent]);
 W_1byte(0,1,'%'); 
 W_1byte(0,1,' '); 
  W_1byte(0,1,tab1[Voltage/1000]);  
 W_1byte(0,1,'.');
 W_1byte(0,1,tab1[(Voltage00)/100]);
 W_1byte(0,1,tab1[(Voltage0)/10]); 
 W_1byte(0,1,'V'); 
  }
}
void ADC_GPIO_Configuration(void)        //ADC配置函数
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);   //使能ADC和GPIOC时钟
  //PB1 作为模拟通道输入引脚                        
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;        //管脚1
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;    //输入模式
  GPIO_Init(GPIOB, &GPIO_InitStructure);     //GPIO组

}




  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
目录 1 文中的缩写 24 1.1 寄存器描述表中使用的缩写列表 24 1.2 术语表 24 1.3 可用的外设 24 2 存储器和总线构架 25 2.1 系统构架 25 2.2 存储器组织 27 2.3 存储器映像 28 2.3.1 嵌入式SRAM 29 2.3.2 位段 29 2.3.3 嵌入式闪存 30 2.4 启动配置 33 3 CRC计算单元(CRC) 34 3.1 CRC简介 34 3.2 CRC主要特性 34 3.3 CRC功能描述 34 3.4 CRC寄存器 35 3.4.1 数据寄存器(CRC_DR) 35 3.4.2 独立数据寄存器(CRC_IDR) 35 3.4.3 控制寄存器(CRC_CR) 36 3.4.4 CRC寄存器映像 36 4 电源控制(PWR) 37 4.1 电源 37 4.1.1 独立的A/D转换器供电和参考电压 37 4.1.2 电池备份区域 38 4.1.3 电压调节器 38 4.2 电源管理器 38 4.2.1 上电复位(POR)和掉电复位(PDR) 38 4.2.2 可编程电压监测器(PVD) 39 4.3 低功耗模式 40 4.3.1 降低系统时钟 40 4.3.2 外部时钟的控制 40 4.3.3 睡眠模式 40 4.3.4 停止模式 41 4.3.5 待机模式 42 4.3.6 低功耗模式下的自动唤醒(AWU) 43 4.4 电源控制寄存器 44 4.4.1 电源控制寄存器(PWR_CR) 44 4.4.2 电源控制/状态寄存器(PWR_CSR) 45 4.4.3 PWR寄存器地址映像 46 5 备份寄存器(BKP) 47 5.1 BKP简介 47 5.2 BKP特性 47 5.3 BKP功能描述 47 5.3.1 侵入检测 47 5.3.2 RTC校准 48 5.4 BKP寄存器描述 48 5.4.1 备份数据寄存器x(BKP_DRx) (x = 1 … 10) 48 5.4.2 RTC时钟校准寄存器(BKP_RTCCR) 48 5.4.3 备份控制寄存器(BKP_CR) 49 5.4.4 备份控制/状态寄存器(BKP_CSR) 49 5.4.5 BKP寄存器映像 51 6 小容量、中容量和大容量产品的复位和时钟控制(RCC) 54 6.1 复位 54 6.1.1 系统复位 54 6.1.2 电源复位 54 6.1.3 备份域复位 55 6.2 时钟 55 6.2.1 HSE时钟 57 6.2.2 HSI时钟 57 6.2.3 PLL 58 6.2.4 LSE时钟 58 6.2.5 LSI时钟 58 6.2.6 系统时钟(SYSCLK)选择 59 6.2.7 时钟安全系统(CSS) 59 6.2.8 RTC时钟 59 6.2.9 看门狗时钟 59 6.2.10 时钟输出 59 6.3 RCC寄存器描述 60 6.3.1 时钟控制寄存器(RCC_CR) 60 6.3.2 时钟配置寄存器(RCC_CFGR) 61 6.3.3 时钟中断寄存器 (RCC_CIR) 63 6.3.4 APB2外设复位寄存器 (RCC_APB2RSTR) 65 6.3.5 APB1外设复位寄存器 (RCC_APB1RSTR) 67 6.3.6 AHB外设时钟使能寄存器 (RCC_AHBENR) 69 6.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 70 6.3.8 APB1外设时钟使能寄存器(RCC_APB1ENR) 71 6.3.9 备份域控制寄存器 (RCC_BDCR) 74 6.3.10 控制/状态寄存器 (RCC_CSR) 75 6.3.11 RCC寄存器地址映像 77 7 互联型产品的复位和时钟控制(RCC) 78 7.1 复位 78 7.1.1 系统复位 78 7.1.2 电源复位 78 7.1.3 备份域复位 79 7.2 时钟 79 7.2.1 HSE时钟 81 7.2.2 HSI时钟 82 7.2.3 PLL 82 7.2.4 LSE时钟 82 7.2.5 LSI时钟 83 7.2.6 系统时钟(SYSCLK)选择 83 7.2.7 时钟安全系统(CSS) 83 7.2.8 RTC时钟 83 7.2.9 看门狗时钟 84 7.2.10 时钟输出 84 7.3 RCC寄存器 85 7.3.1 时钟控制寄存器(RCC_CR) 85 7.3.2 时钟配置寄存器(RCC_CFGR) 86 7.3.3 时钟中断寄存器(RCC_CIR) 88 7.3.4 APB2外设复位寄存器(RCC_APB2RSTR) 91 7.3.5 APB1外设复位寄存器(RCC_APB1RSTR) 92 7.3.6 AHB外设时钟使能寄存器(RCC_AHBENR) 94 7.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 95 7.3.8 APB1外设时钟使能寄存器(RCC_APB1ENR) 97 7.3.9 备份域控制寄存器(RCC_BDCR) 99 7.3.10 控制/状态寄存器(RCC_CSR) 100 7.3.11 AHB外设时钟复位寄存器(RCC_AHBRSTR) 101 7.3.12 时钟配置寄存器2(RCC_CFGR2) 101 7.3.13 RCC寄存器地址映像 103 8 通用和复用功能I/O(GPIO和AFIO) 105 8.1 GPIO功能描述 105 8.1.1 通用I/O(GPIO) 106 8.1.2 单独的位设置或位清除 107 8.1.3 外部中断/唤醒线 107 8.1.4 复用功能(AF) 107 8.1.5 软件重新映射I/O复用功能 107 8.1.6 GPIO锁定机制 107 8.1.7 输入配置 107 8.1.8 输出配置 108 8.1.9 复用功能配置 109 8.1.10 模拟输入配置 109 8.1.11 外设的GPIO配置 110 8.2 GPIO寄存器描述 113 8.2.1 端口配置低寄存器(GPIOx_CRL) (x=A..E) 113 8.2.2 端口配置高寄存器(GPIOx_CRH) (x=A..E) 114 8.2.3 端口输入数据寄存器(GPIOx_IDR) (x=A..E) 114 8.2.4 端口输出数据寄存器(GPIOx_ODR) (x=A..E) 115 8.2.5 端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E) 115 8.2.6 端口位清除寄存器(GPIOx_BRR) (x=A..E) 115 8.2.7 端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 116 8.3 复用功能I/O和调试配置(AFIO) 116 8.3.1 把OSC32_IN/OSC32_OUT作为GPIO 端口PC14/PC15 116 8.3.2 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1 117 8.3.3 CAN1复用功能重映射 117 8.3.4 CAN2复用功能重映射 117 8.3.5 JTAG/SWD复用功能重映射 117 8.3.6 ADC复用功能重映射 118 8.3.7 定时器复用功能重映射 118 8.3.8 USART复用功能重映射 119 8.3.9 I2C1复用功能重映射 120 8.3.10 SPI 1复用功能重映射 120 8.3.11 SPI3复用功能重映射 120 8.3.12 以太网复用功能重映射 121 8.4 AFIO寄存器描述 121 8.4.1 事件控制寄存器(AFIO_EVCR) 121 8.4.2 复用重映射和调试I/O配置寄存器(AFIO_MAPR) 121 8.4.3 外部中断配置寄存器1(AFIO_EXTICR1) 126 8.4.4 外部中断配置寄存器2(AFIO_EXTICR2) 127 8.4.5 外部中断配置寄存器3(AFIO_EXTICR3) 127 8.4.6 外部中断配置寄存器4(AFIO_EXTICR4) 128 8.5 GPIO 和AFIO寄存器地址映象 129 9 中断和事件 130 9.1 嵌套向量中断控制器 130 9.1.1 系统嘀嗒(SysTick)校准值寄存器 130 9.1.2 中断和异常向量 130 9.2 外部中断/事件控制器(EXTI) 134 9.2.1 主要特性 134 9.2.2 框图 135 9.2.3 唤醒事件管理 135 9.2.4 功能说明 135 9.2.5 外部中断/事件线路映像 137 9.3 EXTI 寄存器描述 138 9.3.1 中断屏蔽寄存器(EXTI_IMR) 138 9.3.2 事件屏蔽寄存器(EXTI_EMR) 138 9.3.3 上升沿触发选择寄存器(EXTI_RTSR) 139 9.3.4 下降沿触发选择寄存器(EXTI_FTSR) 139 9.3.5 软件中断事件寄存器(EXTI_SWIER) 140 9.3.6 挂起寄存器(EXTI_PR) 140 9.3.7 外部中断/事件寄存器映像 141 10 DMA控制器(DMA) 142 10.1 DMA简介 142 10.2 DMA主要特性 142 10.3 功能描述 143 10.3.1 DMA处理 143 10.3.2 仲裁器 144 10.3.3 DMA 通道 144 10.3.4 可编程的数据传输宽度、对齐方式和数据大小端 145 10.3.5 错误管理 146 10.3.6 中断 146 10.3.7 DMA请求映像 147 10.4 DMA寄存器 149 10.4.1 DMA中断状态寄存器(DMA_ISR) 149 10.4.2 DMA中断标志清除寄存器(DMA_IFCR) 150 10.4.3 DMA通道x配置寄存器(DMA_CCRx)(x = 1…7) 150 10.4.4 DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7) 152 10.4.5 DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7) 152 10.4.6 DMA通道x存储器地址寄存器(DMA_CMARx)(x = 1…7) 152 10.4.7 DMA寄存器映像 153 11 模拟/数字转换(ADC) 155 11.1 ADC介绍 155 11.2 ADC主要特征 155 11.3 ADC功能描述 156 11.3.1 ADC开关控制 157 11.3.2 ADC时钟 157 11.3.3 通道选择 157 11.3.4 单次转换模式 157 11.3.5 连续转换模式 158 11.3.6 时序图 158 11.3.7 模拟看门狗 158 11.3.8 扫描模式 159 11.3.9 注入通道管理 159 11.3.10 间断模式 160 11.4 校准 161 11.5 数据对齐 161 11.6 可编程的通道采样时间 161 11.7 外部触发转换 162 11.8 DMA请求 163 11.9 双ADC模式 163 11.9.1 同步注入模式 164 11.9.2 同步规则模式 165 11.9.3 快速交叉模式 165 11.9.4 慢速交叉模式 166 11.9.5 交替触发模式 166 11.9.6 独立模式 167 11.9.7 混合的规则/注入同步模式 167 11.9.8 混合的同步规则+交替触发模式 167 11.9.9 混合同步注入 + 交叉模式 168 11.10 温度传感器 168 11.11 ADC中断 169 11.12 ADC寄存器 170 11.12.1 ADC状态寄存器(ADC_SR) 170 11.12.2 ADC控制寄存器1(ADC_CR1) 171 11.12.3 ADC控制寄存器2(ADC_CR2) 173 11.12.4 ADC采样时间寄存器1(ADC_SMPR1) 175 11.12.5 ADC采样时间寄存器2(ADC_SMPR2) 175 11.12.6 ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4) 176 11.12.7 ADC看门狗高阀值寄存器(ADC_HTR) 176 11.12.8 ADC看门狗低阀值寄存器(ADC_LRT) 176 11.12.9 ADC规则序列寄存器1(ADC_SQR1) 177 11.12.10 ADC规则序列寄存器2(ADC_SQR2) 177 11.12.11 ADC规则序列寄存器3(ADC_SQR3) 178 11.12.12 ADC注入序列寄存器(ADC_JSQR) 178 11.12.13 ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4) 179 11.12.14 ADC规则数据寄存器(ADC_DR) 179 11.12.15 ADC寄存器地址映像 180 12 数字/模拟转换(DAC) 182 12.1 DAC简介 182 12.2 DAC主要特征 182 12.3 DAC功能描述 183 12.3.1 使能DAC通道 183 12.3.2 使能DAC输出缓存 184 12.3.3 DAC数据格式 184 12.3.4 DAC转换 185 12.3.5 DAC输出电压 185 12.3.6 选择DAC触发 185 12.3.7 DMA请求 186 12.3.8 噪声生成 186 12.3.9 三角波生成 187 12.4 双DAC通道转换 187 12.4.1 不使用波形发生器的独立触发 187 12.4.2 使用相同LFSR的独立触发 188 12.4.3 使用不同LFSR的独立触发 188 12.4.4 产生相同三角波的独立触发 188 12.4.5 产生不同三角波的独立触发 188 12.4.6 同时软件启动 189 12.4.7 不使用波形发生器的同时触发 189 12.4.8 使用相同LFSR的同时触发 189 12.4.9 使用不同LFSR的同时触发 189 12.4.10 使用相同三角波发生器的同时触发 189 12.4.11 使用不同三角波发生器的同时触发 190 12.5 DAC寄存器 191 12.5.1 DAC控制寄存器(DAC_CR) 191 12.5.2 DAC软件触发寄存器(DAC_SWTRIGR) 193 12.5.3 DAC通道1的12位右对齐数据保持寄存器(DAC_DHR12R1) 194 12.5.4 DAC通道1的12位左对齐数据保持寄存器(DAC_DHR12L1) 194 12.5.5 DAC通道1的8位右对齐数据保持寄存器(DAC_DHR8R1) 194 12.5.6 DAC通道2的12位右对齐数据保持寄存器(DAC_DHR12R2) 195 12.5.7 DAC通道2的12位左对齐数据保持寄存器(DAC_DHR12L2) 195 12.5.8 DAC通道2的8位右对齐数据保持寄存器(DAC_DHR8R2) 195 12.5.9 双DAC的12位右对齐数据保持寄存器(DAC_DHR12RD) 196 12.5.10 双DAC的12位左对齐数据保持寄存器(DAC_DHR12LD) 196 12.5.11 双DAC的8位右对齐数据保持寄存器(DAC_DHR8RD) 196 12.5.12 DAC通道1数据输出寄存器(DAC_DOR1) 197 12.5.13 DAC通道2数据输出寄存器(DAC_DOR2) 197 12.5.14 DAC寄存器映像 198 13 高级控制定时器(TIM1和TIM8) 199 13.1 TIM1和TIM8简介 199 13.2 TIM1和TIM8主要特性 199 13.3 TIM1和TIM8功能描述 200 13.3.1 时基单元 200 13.3.2 计数器模式 202 13.3.3 重复计数器 209 13.3.4 时钟选择 210 13.3.5 捕获/比较通道 213 13.3.6 输入捕获模式 215 13.3.7 PWM输入模式 216 13.3.8 强置输出模式 216 13.3.9 输出比较模式 217 13.3.10 PWM模式 218 13.3.11 互补输出和死区插入 220 13.3.12 使用刹车功能 221 13.3.13 在外部事件时清除OCxREF信号 223 13.3.14 产生六步PWM输出 223 13.3.15 单脉冲模式 224 13.3.16 编码器接口模式 225 13.3.17 定时器输入异或功能 227 13.3.18 与霍尔传感器的接口 227 13.3.19 TIMx定时器和外部触发的同步 229 13.3.20 定时器同步 232 13.3.21 调试模式 232 13.4 TIM1和TIM8寄存器描述 233 13.4.1 TIM1和TIM8控制寄存器1(TIMx_CR1) 233 13.4.2 TIM1和TIM8控制寄存器2(TIMx_CR2) 234 13.4.3 TIM1和TIM8从模式控制寄存器(TIMx_SMCR) 235 13.4.4 TIM1和TIM8 DMA/中断使能寄存器(TIMx_DIER) 237 13.4.5 TIM1和TIM8状态寄存器(TIMx_SR) 238 13.4.6 TIM1和TIM8事件产生寄存器(TIMx_EGR) 239 13.4.7 TIM1和TIM8捕获/比较模式寄存器1(TIMx_CCMR1) 240 13.4.8 TIM1和TIM8捕获/比较模式寄存器2(TIMx_CCMR2) 242 13.4.9 TIM1和TIM8捕获/比较使能寄存器(TIMx_CCER) 244 13.4.10 TIM1和TIM8计数器(TIMx_CNT) 246 13.4.11 TIM1和TIM8预分频器(TIMx_PSC) 246 13.4.12 TIM1和TIM8自动重装载寄存器(TIMx_ARR) 246 13.4.13 TIM1和TIM8重复计数寄存器(TIMx_RCR) 246 13.4.14 TIM1和TIM8捕获/比较寄存器1(TIMx_CCR1) 247 13.4.15 TIM1和TIM8捕获/比较寄存器2(TIMx_CCR2) 247 13.4.16 TIM1和TIM8捕获/比较寄存器3(TIMx_CCR3) 247 13.4.17 TIM1和TIM8捕获/比较寄存器(TIMx_CCR4) 248 13.4.18 TIM1和TIM8刹车和死区寄存器(TIMx_BDTR) 248 13.4.19 TIM1和TIM8 DMA控制寄存器(TIMx_DCR) 249 13.4.20 TIM1和TIM8连续模式的DMA地址(TIMx_DMAR) 250 13.4.21 TIM1和TIM8寄存器图 251 14 通用定时器(TIMx) 253 14.1 TIMx简介 253 14.2 TIMx主要功能 253 14.3 TIMx功能描述 254 14.3.1 时基单元 254 14.3.2 计数器模式 255 14.3.3 时钟选择 263 14.3.4 捕获/比较通道 265 14.3.5 输入捕获模式 267 14.3.6 PWM输入模式 267 14.3.7 强置输出模式 268 14.3.8 输出比较模式 268 14.3.9 PWM 模式 269 14.3.10 单脉冲模式 271 14.3.11 在外部事件时清除OCxREF信号 273 14.3.12 编码器接口模式 273 14.3.13 定时器输入异或功能 275 14.3.14 定时器和外部触发的同步 275 14.3.15 定时器同步 277 14.3.16 调试模式 281 14.4 TIMx寄存器描述 282 14.4.1 控制寄存器1(TIMx_CR1) 282 14.4.2 控制寄存器2(TIMx_CR2) 283 14.4.3 从模式控制寄存器(TIMx_SMCR) 284 14.4.4 DMA/中断使能寄存器(TIMx_DIER) 285 14.4.5 状态寄存器(TIMx_SR) 286 14.4.6 事件产生寄存器(TIMx_EGR) 287 14.4.7 捕获/比较模式寄存器1(TIMx_CCMR1) 288 14.4.8 捕获/比较模式寄存器2(TIMx_CCMR2) 290 14.4.9 捕获/比较使能寄存器(TIMx_CCER) 292 14.4.10 计数器(TIMx_CNT) 293 14.4.11 预分频器(TIMx_PSC) 293 14.4.12 自动重装载寄存器(TIMx_ARR) 293 14.4.13 捕获/比较寄存器1(TIMx_CCR1) 293 14.4.14 捕获/比较寄存器2(TIMx_CCR2) 294 14.4.15 捕获/比较寄存器3(TIMx_CCR3) 294 14.4.16 捕获/比较寄存器4(TIMx_CCR4) 294 14.4.17 DMA控制寄存器(TIMx_DCR) 295 14.4.18 连续模式的DMA地址(TIMx_DMAR) 295 14.4.19 TIMx寄存器图 296 15 基本定时器(TIM6和TIM7) 298 15.1 TIM6和TIM7简介 298 15.2 TIM6和TIM7的主要特性 298 15.3 TIM6和TIM7的功能 299 15.3.1 时基单元 299 15.3.2 计数模式 300 15.3.3 时钟源 302 15.3.4 调试模式 303 15.4 TIM6和TIM7寄存器 303 15.4.1 TIM6和TIM7控制寄存器1(TIMx_CR1) 303 15.4.2 TIM6和TIM7控制寄存器2(TIMx_CR2) 304 15.4.3 TIM6和TIM7 DMA/中断使能寄存器(TIMx_DIER) 304 15.4.4 TIM6和TIM7状态寄存器(TIMx_SR) 305 15.4.5 TIM6和TIM7事件产生寄存器(TIMx_EGR) 305 15.4.6 TIM6和TIM7计数器(TIMx_CNT) 305 15.4.7 TIM6和TIM7预分频器(TIMx_PSC) 306 15.4.8 TIM6和TIM7自动重装载寄存器(TIMx_ARR) 306 15.4.9 TIM6和TIM7寄存器图 307 16 实时时钟(RTC) 308 16.1 RTC简介 308 16.2 主要特性 308 16.3 功能描述 308 16.3.1 概述 308 16.3.2 复位过程 309 16.3.3 读RTC寄存器 309 16.3.4 配置RTC寄存器 310 16.3.5 RTC标志的设置 310 16.4 RTC寄存器描述 311 16.4.1 RTC控制寄存器高位(RTC_CRH) 311 16.4.2 RTC控制寄存器低位(RTC_CRL) 311 16.4.3 RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL) 312 16.4.4 RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL) 313 16.4.5 RTC计数器寄存器 (RTC_CNTH / RTC_CNTL) 313 16.4.6 RTC闹钟寄存器(RTC_ALRH/RTC_ALRL) 314 16.4.7 RTC寄存器映像 315 17 独立看门狗(IWDG) 316 17.1 简介 316 17.2 IWDG主要性能 316 17.3 IWDG功能描述 316 17.3.1 硬件看门狗 316 17.3.2 寄存器访问保护 316 17.3.3 调试模式 316 17.4 IWDG寄存器描述 317 17.4.1 键寄存器(IWDG_KR) 317 17.4.2 预分频寄存器(IWDG_PR) 318 17.4.3 重装载寄存器(IWDG_RLR) 318 17.4.4 状态寄存器(IWDG_SR) 319 17.4.5 IWDG寄存器映像 319 18 窗口看门狗(WWDG) 320 18.1 WWDG简介 320 18.2 WWDG主要特性 320 18.3 WWDG功能描述 320 18.4 如何编写看门狗超时程序 321 18.5 调试模式 322 18.6 寄存器描述 322 18.6.1 控制寄存器(WWDG_CR) 322 18.6.2 配置寄存器(WWDG_CFR) 322 18.6.3 状态寄存器(WWDG_SR) 323 18.6.4 WWDG寄存器映像 323 19 灵活的静态存储器控制器(FSMC) 324 19.1 FSMC功能描述 324 19.2 框图 324 19.3 AHB接口 325 19.3.1 支持的存储器和操作 325 19.4 外部设备地址映像 326 19.4.1 NOR和PSRAM地址映像 327 19.4.2 NAND和PC卡地址映像 327 19.5 NOR闪存和PSRAM控制器 328 19.5.1 外部存储器接口信号 329 19.5.2 支持的存储器及其操作 330 19.5.3 时序规则 330 19.5.4 NOR闪存和PSRAM控制器时序图 330 19.5.5 同步的成组读 343 19.5.6 NOR闪存和PSRAM控制器寄存器 347 19.6 NAND闪存和PC卡控制器 352 19.6.1 外部存储器接口信号 352 19.6.2 NAND闪存/PC卡支持的存储器及其操作 353 19.6.3 NAND闪存、ATA和PC卡时序图 353 19.6.4 NAND闪存操作 354 19.6.5 NAND闪存预等待功能 355 19.6.6 NAND闪存的纠错码ECC计算(NAND闪存) 356 19.6.7 NAND闪存和PC卡控制器寄存器 356 19.7 FSMC寄存器地址映象 362 20 SDIO接口(SDIO) 363 20.1 SDIO主要功能 363 20.2 SDIO总线拓扑 363 20.3 SDIO功能描述 366 20.3.1 SDIO适配器 367 20.3.2 SDIO AHB接口 374 20.4 卡功能描述 374 20.4.1 卡识别模式 374 20.4.2 卡复位 374 20.4.3 操作电压范围确认 375 20.4.4 卡识别过程 375 20.4.5 写数据块 376 20.4.6 读数据块 376 20.4.7 数据流操作,数据流写入和数据流读出(只适用于多媒体卡) 376 20.4.8 擦除:成组擦除和扇区擦除 377 20.4.9 宽总线选择和解除选择 378 20.4.10 保护管理 378 20.4.11 卡状态寄存器 380 20.4.12 SD状态寄存器 382 20.4.13 SD的I/O模式 385 20.4.14 命令与响应 385 20.5 响应格式 388 20.5.1 R1(普通响应命令) 388 20.5.2 R1b 388 20.5.3 R2(CID、CSD寄存器) 388 20.5.4 R3(OCR寄存器) 389 20.5.5 R4(快速I/O) 389 20.5.6 R4b 389 20.5.7 R5(中断请求) 390 20.5.8 R6(中断请求) 390 20.6 SDIO I/O卡特定的操作 390 20.6.1 使用SDIO_D2信号线的SDIO I/O读等待操作 390 20.6.2 使用停止SDIO_CK的SDIO读等待操作 391 20.6.3 SDIO暂停/恢复操作 391 20.6.4 SDIO中断 391 20.7 CE-ATA特定操作 391 20.7.1 命令完成指示关闭 391 20.7.2 命令完成指示使能 391 20.7.3 CE-ATA中断 392 20.7.4 中止CMD61 392 20.8 硬件流控制 392 20.9 SDIO寄存器 392 20.9.1 SDIO电源控制寄存器(SDIO_POWER) 392 20.9.2 SDIO时钟控制寄存器(SDIO_CLKCR) 392 20.9.3 SDIO参数寄存器(SDIO_ARG) 393 20.9.4 SDIO命令寄存器(SDIO_CMD) 393 20.9.5 SDIO命令响应寄存器(SDIO_RESPCMD) 394 20.9.6 SDIO响应1..4寄存器(SDIO_RESPx) 395 20.9.7 SDIO数据定时器寄存器(SDIO_DTIMER) 395 20.9.8 SDIO数据长度寄存器(SDIO_DLEN) 395 20.9.9 SDIO数据控制寄存器(SDIO_DCTRL) 396 20.9.10 SDIO数据计数器寄存器(SDIO_DCOUNT) 397 20.9.11 SDIO状态寄存器(SDIO_STA) 397 20.9.12 SDIO清除中断寄存器(SDIO_ICR) 398 20.9.13 SDIO中断屏蔽寄存器(SDIO_MASK) 399 20.9.14 SDIO FIFO计数器寄存器(SDIO_FIFOCNT) 401 20.9.15 SDIO数据FIFO寄存器(SDIO_FIFO) 401 20.9.16 SDIO寄存器映像 402 21 USB全速设备接口(USB) 403 21.1 USB简介 403 21.2 USB主要特征 403 21.3 USB功能描述 404 21.3.1 USB功能模块描述 405 21.4 编程中需要考虑的问题 406 21.4.1 通用USB设备编程 406 21.4.2 系统复位和上电复位 406 21.4.3 双缓冲端点 409 21.4.4 同步传输 410 21.4.5 挂起/恢复事件 411 21.5 USB寄存器描述 412 21.5.1 通用寄存器 412 21.5.2 端点寄存器 416 21.5.3 缓冲区描述表 419 21.5.4 USB寄存器映像 421 22 控制器局域网(bxCAN) 423 22.1 bxCAN简介 423 22.2 bxCAN主要特点 423 22.3 bxCAN总体描述 424 22.3.1 CAN 2.0B主动内核 424 22.3.2 控制、状态和配置寄存器 424 22.3.3 发送邮箱 424 22.3.4 接收过滤器 424 22.4 bxCAN工作模式 426 22.4.1 初始化模式 426 22.4.2 正常模式 426 22.4.3 睡眠模式(低功耗) 426 22.5 测试模式 427 22.5.1 静默模式 427 22.5.2 环回模式 427 22.5.3 环回静默模式 428 22.6 STM32F10xxx处于调试模式时 428 22.7 bxCAN功能描述 428 22.7.1 发送处理 428 22.7.2 时间触发通信模式 430 22.7.3 接收管理 430 22.7.4 标识符过滤 431 22.7.5 报文存储 434 22.7.6 出错管理 435 22.7.7 位时间特性 436 22.8 bxCAN中断 438 22.9 CAN 寄存器描述 439 22.9.1 寄存器访问保护 439 22.9.2 CAN控制和状态寄存器 439 22.9.3 CAN邮箱寄存器 447 22.9.4 CAN过滤器寄存器 451 22.9.5 bxCAN寄存器列表 454 23 串行外设接口(SPI) 457 23.1 SPI简介 457 23.2 SPI和I2S主要特征 457 23.2.1 SPI特征 457 23.2.2 I2S功能 458 23.3 SPI功能描述 459 23.3.1 概述 459 23.3.2 配置SPI为从模式 462 23.3.3 配置SPI为主模式 462 23.3.4 配置SPI为单工通信 463 23.3.5 数据发送与接收过程 463 23.3.6 CRC计算 468 23.3.7 状态标志 469 23.3.8 关闭SPI 470 23.3.9 利用DMA的SPI通信 470 23.3.10 错误标志 472 23.3.11 SPI中断 472 23.4 I2S功能描述 473 23.4.1 I2S功能描述 473 23.4.2 支持的音频协议 474 23.4.3 时钟发生器 479 23.4.4 I2S主模式 482 23.4.5 I2S从模式 483 23.4.6 状态标志位 484 23.4.7 错误标志位 485 23.4.8 I2S中断 485 23.4.9 DMA功能 485 23.5 SPI和I2S寄存器描述 486 23.5.1 SPI控制寄存器1(SPI_CR1)(I2S模式下不使用) 486 23.5.2 SPI控制寄存器2(SPI_CR2) 487 23.5.3 SPI 状态寄存器(SPI_SR) 488 23.5.4 SPI 数据寄存器(SPI_DR) 489 23.5.5 SPI CRC多项式寄存器(SPI_CRCPR)(I2S模式下不使用) 489 23.5.6 SPI Rx CRC寄存器(SPI_RXCRCR)(I2S模式下不使用) 490 23.5.7 SPI Tx CRC寄存器(SPI_TXCRCR) 490 23.5.8 SPI_I2S配置寄存器(SPI_I2S_CFGR) 490 23.5.9 SPI_I2S预分频寄存器(SPI_I2SPR) 491 23.5.10 SPI 寄存器地址映象 492 24 I2C接口 493 24.1 I2C简介 493 24.2 I2C主要特点 493 24.3 I2C功能描述 494 24.3.1 模式选择 494 24.3.2 I2C从模式 495 24.3.3 I2C主模式 497 24.3.4 错误条件 499 24.3.5 SDA/SCL线控制 500 24.3.6 SMBus 501 24.3.7 DMA请求 502 24.3.8 包错误校验(PEC) 503 24.4 I2C中断请求 504 24.5 I2C调试模式 505 24.6 I2C寄存器描述 505 24.6.1 控制寄存器1(I2C_CR1) 505 24.6.2 控制寄存器2(I2C_CR2) 507 24.6.3 自身地址寄存器1(I2C_OAR1) 508 24.6.4 自身地址寄存器2(I2C_OAR2) 509 24.6.5 数据寄存器(I2C_DR) 509 24.6.6 状态寄存器1(I2C_SR1) 510 24.6.7 状态寄存器2 (I2C_SR2) 512 24.6.8 时钟控制寄存器(I2C_CCR) 513 24.6.9 TRISE寄存器(I2C_TRISE) 514 24.6.10 I2C寄存器地址映象 515 25 通用同步异步收发器(USART) 516 25.1 USART介绍 516 25.2 USART主要特性 516 25.3 USART功能概述 517 25.3.1 USART 特性描述 518 25.3.2 发送器 519 25.3.3 接收器 521 25.3.4 分数波特率的产生 524 25.3.5 USART接收器容忍时钟的变化 525 25.3.6 多处理器通信 526 25.3.7 校验控制 527 25.3.8 LIN(局域互联网)模式 528 25.3.9 USART 同步模式 530 25.3.10 单线半双工通信 532 25.3.11 智能卡 532 25.3.12 IrDA SIR ENDEC 功能模块 533 25.3.13 利用DMA连续通信 535 25.3.14 硬件流控制 537 25.4 USART中断请求 538 25.5 USART模式配置 539 25.6 USART寄存器描述 540 25.6.1 状态寄存器(USART_SR) 540 25.6.2 数据寄存器(USART_DR) 541 25.6.3 波特比率寄存器(USART_BRR) 542 25.6.4 控制寄存器1(USART_CR1) 542 25.6.5 控制寄存器2(USART_CR2) 544 25.6.6 控制寄存器3(USART_CR3) 545 25.6.7 保护时间和预分频寄存器(USART_GTPR) 546 25.6.8 USART寄存器地址映象 548 26 USB OTG全速(OTG_FS) 549 26.1 OTG模块介绍 549 26.2 OTG_FS主要功能 549 26.2.1 通用功能 549 26.2.2 主机模式功能 550 26.2.3 设备模式功能 550 26.3 OTG_FS功能描述 551 26.3.1 OTG全速控制器 551 26.3.2 全速OTG PHY(物理接口) 551 26.4 OTG双角色设备(DRD) 552 26.4.1 ID信号检测 552 26.4.2 HNP双角色设备 552 26.4.3 SRP双角色设备 553 26.5 USB设备模式 553 26.5.1 具备SRP功能的设备 553 26.5.2 设备状态 554 26.5.3 设备端点 554 26.6 USB主机 556 26.6.1 具备SRP功能的主机 556 26.6.2 USB主机状态 557 26.6.3 主机通道 558 26.6.4 主机调度器 558 26.7 SOF触发 560 26.7.1 主机SOF 560 26.7.2 设备SOF 560 26.8 供电选项 560 26.9 USB数据FIFO 562 26.10 设备模式下的FIFO结构 563 26.10.1 设备模式下的接收FIFO 563 26.10.2 设备模式下的发送FIFO 563 26.11 主机模式下的FIFO结构 564 26.11.1 主机模式下的接收FIFO 564 26.11.2 主机模式下的发送FIFO 564 26.12 USB系统性能 565 26.13 OTG_FS中断 566 26.14 OTG_FS控制和状态寄存器 566 26.14.1 CSR存储器映像 567 26.14.2 OTG_FS全局寄存器 570 26.14.3 主机模式下的寄存器 585 26.14.4 设备模式下的寄存器 593 26.14.5 OTG_FS电源和时钟门控寄存器(OTG_FS_PCGCCTL) 608 26.14.6 OTG_FS寄存器映像 610 26.15 OTG_FS编程规则 617 26.15.1 控制器初始化 617 26.15.2 主机模式下的初始化 617 26.15.3 设备模式下的初始化 617 26.15.4 主机模式下的编程规则 618 26.15.5 设备模式下的编程规则 632 26.15.6 操作流程 633 26.15.7 最差情况下的响应时间 646 26.15.8 OTG编程规则 648 27 以太网(ETH):具有DMA控制器的介质访问控制(MAC) 652 27.1 以太网模块介绍 652 27.2 以太网模块主要功能 652 27.2.1 MAC控制器功能 652 27.2.2 DMA功能 653 27.2.3 PTP功能 654 27.3 以太网模块引脚和内部信号 654 27.4 以太网模块功能描述:SMI、MII和RMII 655 27.4.1 站点管理接口(SMI) 655 27.4.2 独立于介质的接口:MII 657 27.4.3 精简的独立于介质的接口:RMII 659 27.4.4 MII/RMII的选择 660 27.5 以太网模块功能描述:MAC 802.3 660 27.5.1 MAC 802.3帧格式 661 27.5.2 MAC帧的传输 663 27.5.3 MAC帧的接收 669 27.5.4 MAC中断 673 27.5.5 MAC过滤 673 27.5.6 MAC自循环模式 675 27.5.7 MAC管理计数器:MMC 675 27.5.8 电源管理:PMT 676 27.5.9 精确时间协议(IEEE1588 PTP) 678 27.6 以太网功能描述:DMA控制器操作 682 27.6.1 使用DMA发送的初始化步骤 683 27.6.2 主机总线突发访问 683 27.6.3 主机数据缓存对齐 684 27.6.4 缓冲区大小计算 684 27.6.5 DMA仲裁器 684 27.6.6 DMA错误响应 684 27.6.7 发送DMA设置 684 27.6.8 接收DMA设置 694 27.6.9 DMA中断 700 27.7 以太网中断 701 27.8 以太网寄存器描述 702 27.8.1 MAC寄存器描述 702 27.8.2 MMC寄存器描述 713 27.8.3 IEEE 1588时间戳寄存器 716 27.8.4 DMA寄存器描述 719 27.8.5 以太网寄存器映像 729 28 器件电子签名 732 28.1 存储器容量寄存器 732 28.1.1 闪存容量寄存器 732 28.2 产品唯一身份标识寄存器(96位) 732 29 调试支持(DBG) 734 29.1 概况 734 29.2 ARM参考文献 735 29.3 SWJ调试端口(serial wire and JTAG) 735 29.3.1 JTAG-DP和SW-DP切换的机制 736 29.4 引脚分布和调试端口脚 736 29.4.1 SWJ调试端口脚 736 29.4.2 灵活的SWJ-DP脚分配 736 29.4.3 JTAG脚上的内部上拉和下拉 737 29.4.4 利用串行接口并释放不用的调试脚作为普通I/O口 737 29.5 STM32F10xxx JTAG TAP 连接 738 29.6 ID 代码和锁定机制 738 29.6.1 微控制器设备ID编码 738 29.6.2 边界扫描TAP 739 29.6.3 Cortex-M3 TAP 740 29.6.4 Cortex-M3 JEDEC-106 ID代码 740 29.7 JTAG调试端口 740 29.8 SW调试端口 741 29.8.1 SW协议介绍 741 29.8.2 SW协议序列 741 29.8.3 SW-DP状态机(Reset, idle states, ID code) 742 29.8.4 DP和AP读/写访问 742 29.8.5 SW-DP寄存器 742 29.8.6 SW-AP寄存器 743 29.9 对于JTAG-DP或SWDP都有效的AHB-AP (AHB 访问端口) 743 29.10 内核调试 744 29.11 调试器主机在系统复位下的连接能力 744 29.12 FPB (Flash patch breakpoint) 744 29.13 DWT(数据观察点触发data watchpoint trigger) 745 29.14 ITM (指令跟踪微单元 instrumentation trace macrocell) 745 29.14.1 概述 745 29.14.2 时间戳包,同步和溢出包 745 29.15 ETM模块(嵌入式跟踪微单元Embedded Trace Macrocell) 746 29.15.1 概述 746 29.15.2 信号协议和包类型 746 29.15.3 主要的ETM寄存器 747 29.15.4 配置实例 747 29.16 MCU调试模块(MCUDBG) 747 29.16.1 低功耗模式的调试支持 747 29.16.2 支持定时器、看门狗、bxCAN和I2C的调试 747 29.16.3 调试MCU配置寄存器 748 29.17 TPIU (跟踪端口接口单元 Trace Port Interface Unit) 750 29.17.1 导言 750 29.17.2 跟踪引脚分配 750 29.17.3 TPUI格式器 752 29.17.4 TPUI帧异步包 752 29.17.5 同步帧包的发送 752 29.17.6 同步模式 752 29.17.7 异步模式 753 29.17.8 TRACECLKIN在STM32F10xxx内部的连接 753 29.17.9 TPIU寄存器 753 29.17.10 配置的例子 754 29.18 DBG寄存器地址映象 754
### 回答1: STM32F103是一款强大的单片机芯片,具备了丰富的外设和功能,通过对其进行串行驱动,可以轻松地实现LCD12864的显示。 首先,需要连接STM32F103与LCD12864。通过将LCD12864的VCC引脚连接到STM32F103的正电源引脚,将GND引脚连接到负电源引脚,将RS引脚连接到STM32F103的引脚,将RW引脚连接到地引脚,并将E引脚连接到STM32F103的引脚。然后,通过将LCD12864的LED+引脚连接到STM32F103的正电源引脚,将LED-引脚连接到STM32F103的引脚,以控制背光。 接下来,需要编写代码来驱动LCD12864。首先,需要定义引脚号和其他常量,以便于代码中使用。然后,配置引脚为输出模式和输入模式,通过设置对应引脚的高低电平来控制LCD12864的操作。通过使用时序控制函数,可以按照LCD12864的协议进行显示控制和数据传输。 在代码中,可以定义函数来实现对LCD12864的初始化,包括设置显示方式、清屏、设置起始显示位置等。可以定义函数来实现在指定位置写入字符或字符串,并可以定义其他辅助函数来实现更多的操作。 最后,在主函数中调用这些函数,可以实现对LCD12864的操作和显示。可以根据需要循环调用显示函数,以实现动态更新显示内容。可以通过串口或其他方式输入数据,然后通过LCD12864显示出来。 总之,通过STM32F103的串行驱动,可以方便地控制LCD12864的显示,实现丰富的显示功能。 ### 回答2: STM32F103串行驱动LCD12864是一种常用的显示器件驱动方式。该驱动方式使用串行通信协议将数据传输到LCD12864,使其能够显示图像、文字等内容。 首先,我们需要准备好STM32F103单片机和LCD12864显示器。接下来,可以选择使用SPI、I2C等串行通信协议进行数据传输。以SPI为例进行说明。 1. 首先,要确保STM32F103串行接口的SPI功能已经使能,并进行相应的引脚配置。 2. 然后,需要编写代码进行初始化。初始化主要包括SPI参数设置、GPIO口初始化等操作。 3. 接下来,可以编写显示函数,将需要显示的数据(如图像像素、文字等)转换为对应的字节码,并通过SPI发送给LCD12864。 4. 在主程序中,可以调用显示函数,将需要显示的内容发送到LCD12864。 需要注意的是,由于LCD12864的显示控制方式比较特殊,需要按照其指定的协议进行数据传输。在编程时,需要参考LCD12864的说明文档,根据其特定的数据格式和时序要求进行数据传输。 总结起来,STM32F103串行驱动LCD12864,需要通过SPI等串行通信协议将数据发送给LCD12864实现图像、文字等内容的显示。编程时需要了解LCD12864的特定协议要求,并进行相应的软硬件配置和函数编写。 ### 回答3: STM32F103串行驱动LCD12864可通过SPI接口实现。首先,需要设置STM32F103的GPIO引脚,将SPI口配置为输出模式,准备好时钟信号、数据输入、数据输出和片选引脚。然后,使用SPI的初始化函数对SPI接口进行初始化,设置SPI的模式、数据大小、时钟分频等参数。 在初始化完成后,我们可以通过SPI接口向LCD12864发送命令和数据。命令一般会通过片选引脚将LCD12864从其他设备中选择出来,并设置为写模式。然后,将命令发送给LCD12864,以控制其功能和显示。 数据发送的过程类似,不同的是,我们需要将片选引脚设置为读模式,并发送数据到LCD12864。通过这些命令和数据,可以控制LCD12864的像素、图形和文字的显示。 在发送命令和数据时,需要注意SPI的时序和数据格式。STM32F103的SPI接口具有丰富的配置选项,可以根据LCD12864的特性进行设置。 总之,通过将STM32F103与LCD12864连接,并使用SPI接口进行初始化和数据传输,我们可以实现串行驱动LCD12864的功能。根据LCD12864的特性,我们可以发送命令和数据来控制其显示内容,实现各种图形和文字的显示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值