您好,欢迎访问三七文档
固件函数库VoidRCC_Configuration(void)时钟设置函数VoidGPIO_Configuration(void)GPIO引脚初始化设置VoidSystick_Configuration(void)系统定时器设置函数voidUSART_Configuration(void)USART收发器设置ErrorStatus枚举值RCC_DeInit();将外设RCC寄存器重设为缺省值RCC_HSEConfig();设置外部高速晶振RCC_WaitForHSEStartUp();等待HSE起振RCC_HCLKConfig();设置AHB时钟RCC_PCLK1Config();设置低速AHB时钟RCC_PCLK2Config();设置高速AHB时钟RCC_SYSCLK_DivnAHB时钟=系统时钟/nRCC_PLLConfig();设置PLL时钟源及倍频系数RCC_PLLCmd();使能或失能PLLRCC_GetSYSCLKSource();返回用作系统时钟的时钟源RCC_GetFlagStatus();检查指定的RCC标志位设置与否RCC_AHBPeriphClockCmd();使能或失能AHB外设时钟RCC_APB1PeriphClockCmd();使能或失能APB1外设时钟RCC_APB2PeriphClockCmd();使能或失能APB2外设时钟RCC_PLLSource_HSE_Div1PLL的输入时钟=HSE时钟频率RCC_PLLSource_HSE_Div2PLL的输入时钟=HSE时钟频率/2RCC_PLLSource_HSI_Div2PLL的输入时钟=HSI时钟频率/2RCC_PLLMul_nPLL输入时钟*nRCC_FLAG_PLLRDYPLL就绪RCC_APB2Periph_GPIOAGPIOA时钟RCC_APB2Periph_GPIOBGPIOB时钟RCC_APB2Periph_GPIOCGPIOC时钟RCC_APB2Periph_GPIODGPIOD时钟RCC_APB2Periph_GPIOEGPIOE时钟RCC_APB2Periph_ALL全部APB2外设时钟RESE重置GPIO_InitTypeDefGPIO结构体GPIO_InitStructure指向结构体GPIO_InitTypeDef的指针GPIO_Pin_n选择待设置的GPIO管脚使用“|”可以一次选中多个GPIO_Speed设置选中管脚的速率GPIO_Speed_10MHz最多输出速率10MHzGPIO_Speed_2MHz最多输出速率2MHzGPIO_Speed_50MHz最多输出速率50MHzGPIO_Mode设置管脚的工作状态GPIO_Mode_AIN模拟输入GPIO_Mode_IN_FLOATING浮空输入GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入GPIO_Mode_Out_PP推挽输出GPIO_Mode_Out_OD开漏输出GPIO_Mode_AF_OD复用开漏输出GPIO_Mode_AF_PP复用推挽输出GPIO_Init();根据GPIO_InitStruct中指定的参数初始化外设GPIO_x寄存器SysTick_CounterCmd();使能或失能SysTick计数器SysTick_Counter_Disable失能计数器SysTick_Counter_Enable使能计数器SysTick_Counter_Clear清除计数器的值为0SysTick_CLKSourceConfig();设置SysTick时钟源SysTick_CLKSource_HCLK_Div8SysTick时钟源为AHB时钟/8SysTick_CLKSource_HCLKSysTick时钟源为AHB时钟SysTick_SetReload();设置SysTick重装载值FLASH_SetLatency();设置代码延时值FLASH_PrefetchBufferCmd();使能或失能预取指缓存FLASH_PrefetchBuffer_Enable预取指缓存使能FLASH_PrefetchBuffer_Disable预取指缓存失能FLASH_Latency用来设置FLASH储存器延时时钟周期数FLASH_Latency_00延时周期FLASH_Latency_11延时周期FLASH_Latency_22延时周期位绑定公式(BitBanding)SARM区0x20000000~0x200FFFFF1MAliasAddr=0x22000000+((A-0x20000000)*8+n)*4//可以用左移代替乘法=0x22000000+(A-0x20000000)*32+4*nSARM区0x40000000~0x400FFFFF1MAliasAddr=0x42000000+((A-0x40000000)*8+n)*4=0x42000000+(A-0x40000000)*32+4*nAliasAddr=(A&0xF0000000)+0x2000000+((A&0xFFFFF)*32+4*n)bit_word_offset=(byte_offsetx32)+(bit_number×4)bit_word_addr=bit_band_base+bit_word_offset其中:bit_word_offset是目标位在存取器位段区中的位置bit_word_addr是别名存储器区中字的地址,它映射到某个目标位。bit_band_base是别名区的起始地址。byte_offset是包含目标位的字节在位段里的序号bit_number是目标位所在位置(0-31)voidRCC_Configuration(void){ErrorStatusHSEStartUpStatus;RCC_DeInit();RCC_HSEConfig(RCC_HSE_ON);HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus==SUCCESS){RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);FLASH_SetLatency(FLASH_Latency_2);FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);RCC_PLLCmd(ENABLE);while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while(RCC_GetSYSCLKSource()!=0x08);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);}}voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);}voidSystick_Configuration(void){SysTick_CounterCmd(SysTick_Counter_Disable);SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);SysTick_CounterCmd(SysTick_Counter_Clear);SysTick_SetReload(9000*1000);}voidDelay_Second(void){SysTick_CounterCmd(SysTick_Counter_Enable);while(SysTick_GetFlagStatus(SysTick_FLAG_COUNT)==0);SysTick_CounterCmd(SysTick_Counter_Disable);SysTick_SetReload(9000*1000);//SysTick_CounterCmd(SysTick_Counter_Clear);}voidUSART_Configuration(void){USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate=9600;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,&USART_InitStructure);USART_Cmd(USART1,ENABLE);}程序下载与调试1.FLASH(ROM)(0x08000000)只能烧写1000次2.RAM(0x20000000)通信的分类异步:同步:串行通信:使用一条数据线,将数据一位一位的依次传输,每一位数据占据一个固定的通信制式:单工:数据只能从发送站向接收站传送半双工:数据能双向传送,但是不能同时在两个方向上传送全双工:接收数据和发送数据占用不同的线路,可以同时发送和接收数据并行通信:USART通用同步异步收发器(双全共)TXD(发送端)RXD(接收端)GND使用工业标准NRZ异步串行格式分数波特率发生器支持同步单项通信和半双工单线通信LIN(局部互联网)智能卡协议和irDA(红外数据组织)SIRENDEC规范调制解调器(CTX/RTS)还允许多处理器通信用于多缓冲器配置的DMA方式可实现高速数据通信任何USART通信,需要用到2个对外连接的引脚:RxDTxDRxD是输入引脚,用于串行数据接收TxD是输出引脚,用于串行数据发送SCLK:发送器时钟输出(同步模式用到)在IrDA模式中需要用到下列引脚:IrDA_RDI:IrDA模式下的数据输入IrDA_TDI:IrDA模式下的数据输出调制解调器模式中需要:nCTS:清除发送nRTS:发送请求异步串行通信协议需要定义的5个内容(通信双方协议需要一致)1.起始位2.数据(8、9)3.奇偶校验(9位包括)(防止外部的干扰)4.停止位5.波特率的设置(通信的速度)异步通信应用场合:1.芯片间近距离通信2.与PC机间通信3.模块之间远距离通信(RS232RS485)数据发送过程:1.通过在USART_CR1寄存器上置位UE位来激活USART2.编程USART_CR1的M位来定义字长3.在USART_CR2中编程停止位的位数4.*如果采用多缓冲器通信,配置USART_CR3中的DMA是能位(DMAT)。按多缓冲器通信中的描述配置DMA寄存器5.设置USART_CR1中的TE位,发送一个空闲帧数为第一次数据发送6.利用USART_BRR寄存器选择需要的波特率7.把要发送的数据写进USART_DR寄存器(此动作清除TXE位)在只有一个缓冲器的情况下,
本文标题:STM32总结
链接地址:https://www.777doc.com/doc-6360125 .html