IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32寄存器操作(串口) -> 正文阅读

[嵌入式]STM32寄存器操作(串口)

????????现在网上许多STM32操作方法都是通过库函数来写STM32,即使特意搜索通过寄存器操作STM32许多时候也找不到相对应的方法,那么我就想通过自己的摸索来记录这一过程,同时也是给大家一个思路,有什么不对请指正,那么下面我们就开始。(使用芯片为STM32F407VET6)

? ? ? ?

????????注:一下方法经供参考和提供思路,不保证完全正确!!!

? ? ? ? 串口的通讯原理和过程我就不展开了,网上都有,大家可以自行搜索。

? ? ? ? 一,初始化

??

????????

? ? ? ? 以上部分是计算波特率的方法,大家可以先手算一下实质上就是通过计算把整数部分和小数部分单独拿出来来,因为在32里面小数和整数部分是分开存放的。

????????

? ? ? ? 二,端口初始化

? ? ? ? 大家可以对自己使用的串口端口进行相应的初始化,开端口时钟,配置模式,输出速度,有重映射的配置重映射,这里我就不放出来了(P.S.其实我就是懒,没写)

? ? ? ? 三,配置串口通信

????????

? ? ? ? ?这个大家可以对照自己需要的协议来配置,我这边把官方的寄存器的位数贴上来

????????

?

这里特别说一下,上文说到32的波特率的问题

?

在这里就可以看出来波特率的小数和整数部分是分开放置的,所以前面的计算就是将波特率的整数和小数拆开分别存放。

?

寄存器我就不详细说明了,官方手册上说的很清楚,大家可以对照这每一位看看那些要用。

? ? ? ? 四,串口的收与发

? ? ? ? 这一块在网上通过寄存器操作的方法特别少,官方的函数库我也看了个七七八八,所以我就特别列出来了

? ? ? ? (1)发送单个数据

????????

? ? ? ? 其实这个很简单就是将数据送到USART_DR寄存器去,后面就是芯片内部硬件的事了?

?大家可以看一下官方对这个寄存器的描述

? ? ? ? (2)发送一串数据

? ? ? ? 我们来分析一下这个函数,第一句话就是发送一个数据,就是把数据移到USART_DR寄存器中,然后就是

while((USART1->SR&(1<<7))==1);

大家注意这句话啊,语法!!!while后面是分号,就是空语句。我们结合参考手册来分析一下

?

我们看第七位,官方手册说了当内容移到移位寄存器的时候由硬件置零,其实这边说的移位寄存器就是芯片内部的事了,大家大可将其视作是数据已经发送出去了,而这句话实质上就是等待,等待硬件的这个信号,当这个信号到来的时候说明数据已经发送出去,这时再发送下一位。虽然很简单,不过我在网上一直没有找到这个问题,最后对照这官方库写出来了,因为这个语法问题我写了一下午。?

? ? ? ? (3)收

? ? ? ? 这个没什么好说的,就是当芯片收到数据,一个中断过来,大家可以对收到的数据进行处理。

? ? ? ? 最后贴上我写的串口的几个函数

void senddata1(unsigned char data1){USART1->DR=data1&(unsigned short int)0x01FF;}

void sendstring1(unsigned char *string1)
{
	unsigned char i=0;
	do
	{
		senddata1(string1[i]);
		while((USART1->SR&(1<<7))==1);
		i++;
	}while(string1[i]!=0);
}

void usart1_init(u32 pclk1,u32 bound1)
{  	 
	float temp1;
	u16 mantissa1;
	u16 fraction1;	   
	temp1=(float)(pclk1*1000000)/(bound1*16);
	mantissa1=temp1;
	fraction1=(temp1-mantissa1)*16; 
    mantissa1<<=4;
	mantissa1+=fraction1; 
	RCC->AHB1ENR|=1<<0;
	RCC->APB2ENR|=1<<4;
	
	GPIOA->MODER|=2<<18;
	GPIOA->MODER|=2<<20;
	
	GPIOA->OSPEEDR|=2<<18;
	GPIOA->OSPEEDR|=2<<20;
	
	GPIOA->AFR[1]|=7<<4;
	GPIOA->AFR[1]|=7<<8;
	
	RCC->APB2RSTR|=1<<4;
	RCC->APB2RSTR&=~(1<<4);   	   
	//2¨ì??êéè??
 	USART1->BRR=mantissa1;
	USART1->CR1|=0X200C;
	//ê1?ü?óê??D?? 
	USART1->CR1|=1<<5;
	MY_NVIC_Init(3,3,USART1_IRQn,2);
}

?

以上就是我对32的一点个人理解,仅供参考,有什么错误还请大家指正

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:27:52  更:2021-07-16 11:29:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:36:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码