打印
[STM32F1]

STM32基础篇 ——232串口通信实验

[复制链接]
3240|52
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aizaixiyuanqian|  楼主 | 2017-12-11 22:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 aizaixiyuanqian 于 2017-12-11 22:13 编辑

这次实验我们将学习 STM32 的串口,如何使用 STM32 的串口来发送和接收数据。 本次实验实现如下功能:STM32 通过串口和上位机通讯,STM32收到上位机发过来的符串后,返回给上位机收到的字符串。
沙发
aizaixiyuanqian|  楼主 | 2017-12-11 22:15 | 只看该作者
串口的操作步骤:1) 打开 GPIO 的时钟使能和 USART 的时钟使能。
2) 设置串口 IO 的 IO 口模式。 (模拟输入, 复用推挽输出)
3) 初始化 USART。 (波特率、数据长度、停止位、效验位等)
4) 如果使用中断接收的话,那么还要设置 NVIC 并打开中断使能。( 设置它的中断优先级。 )



使用特权

评论回复
板凳
aizaixiyuanqian|  楼主 | 2017-12-11 22:20 | 只看该作者
串口库函数说明1.RCC_APB2PeriphClockCmd() 函数
2) GPIO_Init()   GPIO初始化
3)USART_Init() 函数  串口初始化
4)USART_Cmd() 函数  串口使能函数
5)NVIC_Init(&NVIC_InitStructure) 函数  用来设置中断的优先级和打开总中断
6)USART_SendData() 函数  发送数据
7) USART_GetFlagStatus() 函数  检测状态的函数
8) USART_ITConfig()  打开 USART 中断的函数
9) USART_ReceiveData() 函数 串口接收数据函数









使用特权

评论回复
地板
aizaixiyuanqian|  楼主 | 2017-12-11 22:21 | 只看该作者
串口初始化函数
void usart_init()
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO
USART_InitTypeDef USART_InitStructure; //串口结构体定义
NVIC_InitTypeDef NVIC_InitStructure;//中断结构体定义
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  //打开时钟
/* 配置 GPIO 的模式和 IO 口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX //串口输出 PA9
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化串口输入 IO */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX //串口输入 PA10
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;  //模拟输入
GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化 GPIO */
USART_InitStructure.USART_BaudRate=9600; //波特率设置为 9600 //波特率
USART_InitStructure.USART_WordLength=USART_WordLength_8b; //数据长 8 位
USART_InitStructure.USART_StopBits=USART_StopBits_1; //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); /* 初始化 USART1 */
USART_Cmd(USART1, ENABLE);  /* 使能 USART1 */
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能或者失能指定的USART中断 接收中断
USART_ClearFlag(USART1,USART_FLAG_TC);//清除 USARTx 的待处理标志位
/* 设置 NVIC 参数 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //打开 USART1 的全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为 0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为 0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
NVIC_Init(&NVIC_InitStructure);
}

使用特权

评论回复
5
aizaixiyuanqian|  楼主 | 2017-12-11 22:22 | 只看该作者
串口接收函数   //回显
void USART1_IRQHandler(void)  //串口 1 中断函数
{
static u8 k;
USART_ClearFlag(USART1,USART_FLAG_TC);
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=Bit_RESET)//检查指定的 USART 中断发生
与否
{
k=USART_ReceiveData(USART1);
USART_SendData(USART1,k);//通过外设 USARTx 发送单个数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
}
}

使用特权

评论回复
6
aizaixiyuanqian|  楼主 | 2017-12-11 22:23 | 只看该作者
主函数部分
int main()
{
usart_init();//串口 1 初始化
while(1);
}
设置串口波特率为 9600,在串口助手可以观察到现象。

使用特权

评论回复
7
aizaixiyuanqian|  楼主 | 2017-12-11 22:24 | 只看该作者
有关于串口1的应用我们到后面会再详细讲解,今天就到这里了。

使用特权

评论回复
8
aizaixiyuanqian|  楼主 | 2017-12-11 22:25 | 只看该作者
欢迎大家来学习指正,加油,**。

使用特权

评论回复
9
三大学生1| | 2017-12-22 09:49 | 只看该作者
用到的函数给了出来很好

使用特权

评论回复
10
sdCAD| | 2017-12-22 16:26 | 只看该作者
aizaixiyuanqian 发表于 2017-12-11 22:23
主函数部分
int main()
{

使用特权

评论回复
11
fengm| | 2017-12-22 16:27 | 只看该作者
aizaixiyuanqian 发表于 2017-12-11 22:21
串口初始化函数
void usart_init()
{

注释的非常详细。

使用特权

评论回复
12
pl202| | 2017-12-22 16:27 | 只看该作者
这个是STM32哪个芯片?

使用特权

评论回复
13
mmbs| | 2017-12-22 16:28 | 只看该作者
最基本入门的教程。

使用特权

评论回复
14
sdCAD| | 2017-12-22 16:29 | 只看该作者
aizaixiyuanqian 发表于 2017-12-11 22:23
主函数部分
int main()
{

提供一个完成的工程代码。

使用特权

评论回复
15
fengm| | 2017-12-22 16:29 | 只看该作者
aizaixiyuanqian 发表于 2017-12-11 22:21
串口初始化函数
void usart_init()
{

可以配合硬件电路图来讲解。

使用特权

评论回复
16
pl202| | 2017-12-22 16:29 | 只看该作者
现在的STM32Cube都可以直接配置了。

使用特权

评论回复
17
mmbs| | 2017-12-22 16:29 | 只看该作者
没有仿真器,可以通过串口进行调试。

使用特权

评论回复
18
heisexingqisi| | 2017-12-24 07:11 | 只看该作者
学习了,等我下载验证一下

使用特权

评论回复
19
aizaixiyuanqian|  楼主 | 2017-12-26 19:23 | 只看该作者
heisexingqisi 发表于 2017-12-24 07:11
学习了,等我下载验证一下

好的,欢迎指正

使用特权

评论回复
20
aizaixiyuanqian|  楼主 | 2017-12-26 19:24 | 只看该作者
mmbs 发表于 2017-12-22 16:29
没有仿真器,可以通过串口进行调试。

可以买一个,也不算贵吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

1353

帖子

6

粉丝