stm32 学习 USRAT通讯

奇偶校验:奇校验--八位数据末尾增加一位校验位,奇校验是使校验位与数据位共有奇数个1,即若数据位有4个1,则校验位为1;数据位5个1,校验位置0.

偶校验则保证数据加校验位一共偶数个1

发送/接收移位寄存器中的值不断右移进行发送 ,低位先行

数据由TDR转运到发送移位寄存器,TXE标志位置1,表示可以写入下一个数据

接收到的数据转入接收移位寄存器,一位一位转入RDR,从左边先移入,移完一帧数据后,置REXE标志位(该标志位可以触发中断)

RDR与TDR软件层面均为同一DR寄存器

信号采样时钟(PCLK1或2进行分频得到)为数据频率(波特率)的16倍频,若采样检测到数据由噪声,NE标志位置1,表示数据存在噪声

初始化:

void USART_int(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1 , ENABLE);
 	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA, &GPIO_InitStructure);   
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure); 
    
    
    USART_InitTypeDef USART_InitStructure;
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
    USART_InitStructure.USART_Parity = USART_Parity_No;   //校验位设置
    USART_InitStructure.USART_StopBits  = USART_StopBits_1;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    
    USART_Init(USART1, &USART_InitStructure);
    
    USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
    
 /*
   USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
   
   
   	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级,该分组设置整个工程设置一次就行,一般可以设置在主程序页面中
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//设置中断通道
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//设置指定中断通道是否使能
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
	NVIC_Init(&NVIC_InitStructure);
 */
    USART_Cmd(USART1, ENABLE);
}

可以配置中断以及DMA

DMA配置

void DMA_int()
    
{
   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  
    DMA_InitTypeDef DMA_InitStructure;
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&USART_Value;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; 
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;             //存储器站点是否自增    
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;//外设地址
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;         //外设站点是否自增
    
    DMA_InitStructure.DMA_BufferSize = 1;            //传输计数器设置,设置传输次数
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  //设置外设站点的传输方向
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                   //设置是否存储器到存储器(是否软件触发)
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                  //传输模式,是否自动重装


    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    
    DMA_Init(DMA1_Channel5, &DMA_InitStructure);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值