- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STM32f103寄存器配置串口通信
主程序接收数据,上位机串口发送的数据已回车键结束,单片机接之后将所有数据发回。
#include "stm32f10x_lib.h"
#include "sys.h"
unsigned char res; unsigned char enddd=0; unsigned int len=0; unsigned char shubiao[200]; unsigned int t;//#include "ioshezhi_jb.h"
unsigned char res; unsigned char enddd=0; unsigned int len=0; unsigned char shubiao[200]; unsigned int t;
// 串口接受数据临时存储
// 接受完成标志
// 数据长度
// 数据存储表 ,限制长度为 200 字节
// 通信数据操作 for 循环控制 unsigned long i=0;
int main()
{
// 系统时钟设置//io 时钟以及输入输出选项设置
// 系统时钟设置
//io 时钟以及输入输出选项设置
RCC->APB2ENR|=0x4000;RCC->APB2ENR|=0x0004;
RCC->APB2ENR|=0x4000;
RCC->APB2ENR|=0x0004;
//开启USART1时钟;① //开启GPIOA 口时钟;③
GPIOA->CRH&=0xfffff00f;GPIOA->CRH|=0x000008b0;//PA9、PA10IO
GPIOA->CRH&=0xfffff00f;
GPIOA->CRH|=0x000008b0;
//P9 推挽输出, max50MHZ ; P10 上拉输入
//串口复位
//串口复位 CD
//串口停止复位 ④
// USART1->BRR=0x1d4c;USART1->BRR=0x0ea6;
// USART1->BRR=0x1d4c;
USART1->BRR=0x0ea6; // USART1->BRR=0x0139;
// USART1->CR1|=0x200c;
USART1->CR1|=0x340c;
TOC \o "1-5" \h \z // 主频 72M 时,波特率为 9600 D5
// 主频 36M 时,波特率为 9600
// 主频 36M 时,波特率为 115200
//串口开,发送长度 8字节,无校验,发送开,接收开;
//串口开,发送长度 9字节,偶校验,发送开,接收开; //( 有效数据还是 8 位长度 ) D6
while (1)
{
// shuru_init(); // 计算输入口的值
if(0x0020==((USART1->SR)&0x0020)) //如果接受到了一个字节的数据 D7
{ res=USART1->DR; //读取串口寄存器数据并存在临时位置 resD8
if(res!=0x0a){shubiao[len]=res;len++;} // 如果该数据不是回车符的最后一个
//字节0x0a,则存入数表
else{if(shubiao[le n-1]==0x0d){e nddd=1;le n--;};}; };
//如果是0x0a,则判断前一个字符是不是 OxOd,(回车符ASCII码为OxOaOd)
//是的话则标记接受完成标志 eddd并删掉已接受到的前一个字节的数据
////if(en ddd==1){for(t=0;t<le n;t++){ USART1->DR=shubiao[t]; while((USART1->SR&0 X40)==0);};
//
//
if(en ddd==1)
{for(t=0;t<le n;t++)
{ USART1->DR=shubiao[t]; while((USART1->SR&0 X40)==0);
};
en ddd=0;
for(t=0;t<=le n;t++){shubiao[t]=0;}; len=0;
};
i++;
if(i==20000){PC151;};
if(i==40000){PC150;i=0;};
II如果接受完成了
//依次发送数表中的数据
II ③
II等待当前字节数据发送结束 迪
//将数表中数据清零
//程序运行状态指示灯
};
}
寄存器注释:
①、⑵ 时钟使能寄存器 RCC->APB2ENR参考不完全手册 P108页面
需要开启的PORTA和USART1的时钟使能位,分别在 bit2和bit14,只要将这两位置 1就
可以使能 PORTA和USART1的时钟了。寄存器各位功能定义如下:
31 30 29 28 27 26 25 24 23 22 21 20
文档评论(0)