最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

基于STM32CubeMX的串口控制研究

IT圈 admin 27浏览 0评论

2024年3月21日发(作者:雪吟怀)

基于

STM32CubeMX

的串口控制研究

潘苏皖

杨凯

(常州信息职业技术学院,江苏常州

213164)

基金项目

2017

年江苏省高等职业院校高水平骨干专业建设项目

(NO.2017GGZY03)

2020

年江苏省大学生创新创业训练计划项目

(NO.2Y)

摘要

本文釆用

STM32

的串口接收中断来对一串以特定字符结束的字符串进行判断并实现控制

在开发方式上基于当前最流行的

STM32CubeMX

平台

整个实现过程快捷高效

关键词

STM32CubeMX

串口

中断

字符串

0

简介

现如今

智能家电

智能手机等一系列智能设备的出现

方便了人们的活动

尤其是将串口和蓝牙连接

可实现无线

数据之间的信息交流

这样可以实现一台设备控制另一台设

本文通过使用

STM32CubeMX

[1]

软件

利用串口中断

并发送信息确认是否真确

2.1

STM32CuBeMx

配置

打开

STM32CubeMx

软件

选择

STM32F401RET6

。然后在

Pinout&Configuartion->SystemCore,

选择

SYS

Debug

SerialWi佗进行下载配置

Con

nectivity,

实现对

LED

的控制

选择

USART1,

MODE

以及

Parameter

Settings

选择

Asynchronous,

波特率为

115200,

字长为

8

位,

无奇偶校

验位

Date

Direction

Receive

and

Tran

smit

模式并选择

1

硬件平台

本文使用低功耗蓝牙开发板

Cannon

121

(如图

1),

STM32F401RET6

131为微控制器

为了清楚地知道

LED

是否

NVIC

Settings

中断使能实现串口串口模式以及中断配置

在NVIC

中对中断优先级进行配置

;在

Pin

out

view

T,

PB3

引脚为

GPIO_Output模式

SystemCo

佗下选

由串口接收到的数据控制

因此需要看到数据的发送与接

由于开发板没有USB

TTL

模块

,因此需要添加一个

GPIO

进行初始化

GPIO

Output

level

下设置为高电

独立外接的

USB

TTL

模块。

而本文使用的是

CH340

如图

2

o

1

为串口和

LED

的芯片引脚连接图

其他为默认

,GPIO

配置如图

3

所示

3

最终引脚的效果图如图

4

所示

选择

EWSRM

工具

生成工程文件

打开工程文件

2.2

软件设计

由于数据寄存器每次只能接收和发送

9

而一个字

1

Cannon

开发板正面图

2

CH340

模块

符为

8

因此串口每次接收和发送一个字符

但是在现

实生活中正常情况是发送一串字符来进行设备的控制

因此

1

芯片串口和

LED

的芯片引脚连接图

USART1

LED

PB3

在这里本文不使用

STM32

HAL

库中的封装函数

这里需要设置一个

flag标志

1

为数据接收完毕

0

PA9

PA10

2

应用开发设计

本文使用

STM32CubeMX

工具软件对串口进行基础配

■o

在打开的

IRA

环境中实现串口接收的数据对

LED

控制

数据未接收或者是接收完毕

并且

flag

为哪种标志值时还

要判断

本文使用

'n'

为判断

flag

标志。

在接收过程中

将每次接收到的一个字符放入数组

SBUF_RX

直到

'n'

出现,

将flag

1,

并关闭接收中断使能

flag=l

T,

15

进行对接收到的字符串进行判断

然后对

LED进行控制

最后再次打开串口中断使能

步骤如下

a-

-

S¥S_JTMS

»VDO

-

-

s

USART1_RX

1

USART1

TX

-

-

bl

d

d

d

d

S3

H

S3

3

4

芯片串口配置完成图

(1)

进入中断

判断是否为接收中断

(2)

接收字符

将字符放入

SUBF_RX

数组中

⑶判断是否为

'n'

标志

是则置

1,

否则不执行

(4)

计数接收到字符的个数

⑸如果

flag=l,

判断接收到的数据是否为

LED

控制

(6)

发送数据

回应是否控制

LED

2.3

代码实现

(1)

main.c

中设置全局变量

uintl6_t

USART_RX_STA

=

0;

uint8_tSBUF_RX[0x3FFF];

uint8_tflag

=

0;

(2)

在主函数里添加中断使能

_HAL_UART_ENABLE_IT(&huartl,UART_IT_RXNE);

(3)

stm32flxx_it.c

文件中

void

USART1_

IRQHandler(void)

放入

main.c文件下

在中断函数中实现

代码如下

uint8_tch

;

if(_HAL_UART_GET_FLAG(

&huartl,

UART_FLAG_

RXNE

)

!=

RESET)

{

ch=(

uintl6_t)READ_REG(ce->DR);

SBUF_RX[RX_COUNT&0X3FFF]=ch;

接收到的字符

保存在

USART_RX_BUF

数组中

if(SBUF_RX[RX_COUNT]

==

OXOA

&&

SBUF_RX[RX_

COUNT-1]

==

OXOD)//

判断是否为

'n'

{

flag

=

l;

〃置

1

16

|

电子制作

2021

01

__HAL_UART_DISABLE_IT(&huartl,

UART_IT_

RXNE);//

关闭接收中断

}

RX_COUNT++;//

计数接收到的字符的个数

}

(4)

main.c

while(l)

中实现代码如下

if(flag)//

如果

flag

1

{

flag

=

O;//flag

0

if(StrCompare(SBUF_RX

,

"openLl"

,RX_

COUNT))//

判断接收字符是否为打开

LED

{

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,

GPIO_

PIN_RESET);

〃打开

LED

HAL_UART_Transmit(&huartl,"Ll

open",8,1000);//

发送字符

查询方式

}

if(StrCompa

(SBUF_RX,

closeLl

,RX_COUNT))

{

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,

GPIO_

PIN_SET);//

关闭

LED

HAL_UART_Transmit(&huartl,"Ll

close",9,1000);//

发送字符

查询方式

}

HAL_UART_Transmit(&huartl,"USARTl

ok",

10,1000);//

发送字符

查询方式

for(uintl6_t

i

=

0;

i

i++)

//

清空数组

{

SBUF_RX[i]=0;

}

RX_COUNT

=

0;

〃计数为

0

__HAL_UART_ENABLE_IT(&huartl,UART_IT_

RXNE);//

打开接收中断

}

StrCompa

佗为字符串比较

用来判断接收到的字符是

否和自己指定的字符相等

不相同返回

0,

相同返回

1

码如下

uint8_t

StrCompare(uint8_t

*

t

,

uint8_t

*

s

,uint8_t

m)

{

uint8_ti;

for(i

=

0;i<

m-2;

i++)

(下转第

43

页)

快速减少

,最终在

200

轮左右几乎达到平衡

此时模型已

经能够拟合到数据

继续训练下去可能会带来过拟合

所以

值的不仅仅是房屋居住总面积这一个重量级特征

还有街道

名称

装修完整度等其他影响特征,

并且有些看起来不是很

重要的特征也能够影响房价

例如房屋类型功能等

数据帮

最终我们采用了

300

轮作为最终训练轮数

助我们筛选出重要的特征

排除了一些

想当然

的结果

o

能够更好的抓住事情的本质

这就是大数据辅助我们解决生

UJ

S

W

QC

活中的事情的实际例子

L5

3

全连接训练过程

全连接在最终的预测中

RMSE

达到了

0.09

3.2

实验结果

本文一共采用了两种方案来做房屋价格预测,

分别是随

机森林回归模型

深度学习全连接回归。

最终结果显示

使

用RMSE

作为衡量指标时

深度学习全连接方案优于随机

森林结果

说明全连接预测是一个很好的方案

4

研究结论与建议

通过本次房屋预测模型的建立

能够得到影响房屋总价

(上接第

16

页)

if(t[i]!=s[i])

return

0;

}

return

1;

}

2.4

运行程序

将程序下载开发板中

,CH340模块与开发板相连插入

电脑

打开串口助手

当发送

openLl'n

开发板

L1

灯将会点亮

开发板这时会发送数据到串口助手提示已点亮

L1

当发送

closeLl'n

开发板口将会关闭

发板会发送数据到串口助手提示已熄灭

L1

如图

5

所示

为串口助手运行的结果

3

结论

通过实现串口对设备的控制

STM32F4

的串口有了

进一步了解

实现字符串的串口接收和发送

需要对指针

数组

字符串等知识的灵活运用

而采用

STM32CubeMX

工具软件

则加速了实现项目的工作效率

43

u

o

q

e

p

参考文献

*

[1]

Breiman

L.

Random

forests

[J].

Machine

learning,

2001,

45(1):5-32.

0

50

100

150

Epochs

200

250

300

*

[2]

Boutilier

C,

Patrascu

R,

Poupart

P,

et

al.

Constraint-based

optimization

and

utility

elicitation

using

the

minimax

decision

criterion[J].

Artificial

Intelligence,

2006,170(8-9):

686-713.

*

⑶李航

.

统计学习方法

[M].

清华大学出版社

中国北京

,2012:10.

*

[4]

周志华

.

机器学习

[M],

清华大学出版社:清华大学

,2017:53.

*

[5]

Thomas

M.

Cover,

JoyA.

Thomas.

Elements

of

Infor

mation

Theory.

2006

*

[6]

Christopher

.

Pattern

Recognition

and

Machine

Learning.

Springer-Verlag.

2006

*

[7]

Elliott

D

S,

Voss

H

L.

Delinquency

and

dropout[J].

1974.

5

串口调试结果

参考文献

*

[l]STM32Cube

初始化代码生成器

[EB/OL],

.

c

om/zh/development-tools/.

*

[2]

小钢炮蓝牙开发板电路图

Cannon_V2_SCH[EB/OL],

/view/.

2024年3月21日发(作者:雪吟怀)

基于

STM32CubeMX

的串口控制研究

潘苏皖

杨凯

(常州信息职业技术学院,江苏常州

213164)

基金项目

2017

年江苏省高等职业院校高水平骨干专业建设项目

(NO.2017GGZY03)

2020

年江苏省大学生创新创业训练计划项目

(NO.2Y)

摘要

本文釆用

STM32

的串口接收中断来对一串以特定字符结束的字符串进行判断并实现控制

在开发方式上基于当前最流行的

STM32CubeMX

平台

整个实现过程快捷高效

关键词

STM32CubeMX

串口

中断

字符串

0

简介

现如今

智能家电

智能手机等一系列智能设备的出现

方便了人们的活动

尤其是将串口和蓝牙连接

可实现无线

数据之间的信息交流

这样可以实现一台设备控制另一台设

本文通过使用

STM32CubeMX

[1]

软件

利用串口中断

并发送信息确认是否真确

2.1

STM32CuBeMx

配置

打开

STM32CubeMx

软件

选择

STM32F401RET6

。然后在

Pinout&Configuartion->SystemCore,

选择

SYS

Debug

SerialWi佗进行下载配置

Con

nectivity,

实现对

LED

的控制

选择

USART1,

MODE

以及

Parameter

Settings

选择

Asynchronous,

波特率为

115200,

字长为

8

位,

无奇偶校

验位

Date

Direction

Receive

and

Tran

smit

模式并选择

1

硬件平台

本文使用低功耗蓝牙开发板

Cannon

121

(如图

1),

STM32F401RET6

131为微控制器

为了清楚地知道

LED

是否

NVIC

Settings

中断使能实现串口串口模式以及中断配置

在NVIC

中对中断优先级进行配置

;在

Pin

out

view

T,

PB3

引脚为

GPIO_Output模式

SystemCo

佗下选

由串口接收到的数据控制

因此需要看到数据的发送与接

由于开发板没有USB

TTL

模块

,因此需要添加一个

GPIO

进行初始化

GPIO

Output

level

下设置为高电

独立外接的

USB

TTL

模块。

而本文使用的是

CH340

如图

2

o

1

为串口和

LED

的芯片引脚连接图

其他为默认

,GPIO

配置如图

3

所示

3

最终引脚的效果图如图

4

所示

选择

EWSRM

工具

生成工程文件

打开工程文件

2.2

软件设计

由于数据寄存器每次只能接收和发送

9

而一个字

1

Cannon

开发板正面图

2

CH340

模块

符为

8

因此串口每次接收和发送一个字符

但是在现

实生活中正常情况是发送一串字符来进行设备的控制

因此

1

芯片串口和

LED

的芯片引脚连接图

USART1

LED

PB3

在这里本文不使用

STM32

HAL

库中的封装函数

这里需要设置一个

flag标志

1

为数据接收完毕

0

PA9

PA10

2

应用开发设计

本文使用

STM32CubeMX

工具软件对串口进行基础配

■o

在打开的

IRA

环境中实现串口接收的数据对

LED

控制

数据未接收或者是接收完毕

并且

flag

为哪种标志值时还

要判断

本文使用

'n'

为判断

flag

标志。

在接收过程中

将每次接收到的一个字符放入数组

SBUF_RX

直到

'n'

出现,

将flag

1,

并关闭接收中断使能

flag=l

T,

15

进行对接收到的字符串进行判断

然后对

LED进行控制

最后再次打开串口中断使能

步骤如下

a-

-

S¥S_JTMS

»VDO

-

-

s

USART1_RX

1

USART1

TX

-

-

bl

d

d

d

d

S3

H

S3

3

4

芯片串口配置完成图

(1)

进入中断

判断是否为接收中断

(2)

接收字符

将字符放入

SUBF_RX

数组中

⑶判断是否为

'n'

标志

是则置

1,

否则不执行

(4)

计数接收到字符的个数

⑸如果

flag=l,

判断接收到的数据是否为

LED

控制

(6)

发送数据

回应是否控制

LED

2.3

代码实现

(1)

main.c

中设置全局变量

uintl6_t

USART_RX_STA

=

0;

uint8_tSBUF_RX[0x3FFF];

uint8_tflag

=

0;

(2)

在主函数里添加中断使能

_HAL_UART_ENABLE_IT(&huartl,UART_IT_RXNE);

(3)

stm32flxx_it.c

文件中

void

USART1_

IRQHandler(void)

放入

main.c文件下

在中断函数中实现

代码如下

uint8_tch

;

if(_HAL_UART_GET_FLAG(

&huartl,

UART_FLAG_

RXNE

)

!=

RESET)

{

ch=(

uintl6_t)READ_REG(ce->DR);

SBUF_RX[RX_COUNT&0X3FFF]=ch;

接收到的字符

保存在

USART_RX_BUF

数组中

if(SBUF_RX[RX_COUNT]

==

OXOA

&&

SBUF_RX[RX_

COUNT-1]

==

OXOD)//

判断是否为

'n'

{

flag

=

l;

〃置

1

16

|

电子制作

2021

01

__HAL_UART_DISABLE_IT(&huartl,

UART_IT_

RXNE);//

关闭接收中断

}

RX_COUNT++;//

计数接收到的字符的个数

}

(4)

main.c

while(l)

中实现代码如下

if(flag)//

如果

flag

1

{

flag

=

O;//flag

0

if(StrCompare(SBUF_RX

,

"openLl"

,RX_

COUNT))//

判断接收字符是否为打开

LED

{

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,

GPIO_

PIN_RESET);

〃打开

LED

HAL_UART_Transmit(&huartl,"Ll

open",8,1000);//

发送字符

查询方式

}

if(StrCompa

(SBUF_RX,

closeLl

,RX_COUNT))

{

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,

GPIO_

PIN_SET);//

关闭

LED

HAL_UART_Transmit(&huartl,"Ll

close",9,1000);//

发送字符

查询方式

}

HAL_UART_Transmit(&huartl,"USARTl

ok",

10,1000);//

发送字符

查询方式

for(uintl6_t

i

=

0;

i

i++)

//

清空数组

{

SBUF_RX[i]=0;

}

RX_COUNT

=

0;

〃计数为

0

__HAL_UART_ENABLE_IT(&huartl,UART_IT_

RXNE);//

打开接收中断

}

StrCompa

佗为字符串比较

用来判断接收到的字符是

否和自己指定的字符相等

不相同返回

0,

相同返回

1

码如下

uint8_t

StrCompare(uint8_t

*

t

,

uint8_t

*

s

,uint8_t

m)

{

uint8_ti;

for(i

=

0;i<

m-2;

i++)

(下转第

43

页)

快速减少

,最终在

200

轮左右几乎达到平衡

此时模型已

经能够拟合到数据

继续训练下去可能会带来过拟合

所以

值的不仅仅是房屋居住总面积这一个重量级特征

还有街道

名称

装修完整度等其他影响特征,

并且有些看起来不是很

重要的特征也能够影响房价

例如房屋类型功能等

数据帮

最终我们采用了

300

轮作为最终训练轮数

助我们筛选出重要的特征

排除了一些

想当然

的结果

o

能够更好的抓住事情的本质

这就是大数据辅助我们解决生

UJ

S

W

QC

活中的事情的实际例子

L5

3

全连接训练过程

全连接在最终的预测中

RMSE

达到了

0.09

3.2

实验结果

本文一共采用了两种方案来做房屋价格预测,

分别是随

机森林回归模型

深度学习全连接回归。

最终结果显示

使

用RMSE

作为衡量指标时

深度学习全连接方案优于随机

森林结果

说明全连接预测是一个很好的方案

4

研究结论与建议

通过本次房屋预测模型的建立

能够得到影响房屋总价

(上接第

16

页)

if(t[i]!=s[i])

return

0;

}

return

1;

}

2.4

运行程序

将程序下载开发板中

,CH340模块与开发板相连插入

电脑

打开串口助手

当发送

openLl'n

开发板

L1

灯将会点亮

开发板这时会发送数据到串口助手提示已点亮

L1

当发送

closeLl'n

开发板口将会关闭

发板会发送数据到串口助手提示已熄灭

L1

如图

5

所示

为串口助手运行的结果

3

结论

通过实现串口对设备的控制

STM32F4

的串口有了

进一步了解

实现字符串的串口接收和发送

需要对指针

数组

字符串等知识的灵活运用

而采用

STM32CubeMX

工具软件

则加速了实现项目的工作效率

43

u

o

q

e

p

参考文献

*

[1]

Breiman

L.

Random

forests

[J].

Machine

learning,

2001,

45(1):5-32.

0

50

100

150

Epochs

200

250

300

*

[2]

Boutilier

C,

Patrascu

R,

Poupart

P,

et

al.

Constraint-based

optimization

and

utility

elicitation

using

the

minimax

decision

criterion[J].

Artificial

Intelligence,

2006,170(8-9):

686-713.

*

⑶李航

.

统计学习方法

[M].

清华大学出版社

中国北京

,2012:10.

*

[4]

周志华

.

机器学习

[M],

清华大学出版社:清华大学

,2017:53.

*

[5]

Thomas

M.

Cover,

JoyA.

Thomas.

Elements

of

Infor

mation

Theory.

2006

*

[6]

Christopher

.

Pattern

Recognition

and

Machine

Learning.

Springer-Verlag.

2006

*

[7]

Elliott

D

S,

Voss

H

L.

Delinquency

and

dropout[J].

1974.

5

串口调试结果

参考文献

*

[l]STM32Cube

初始化代码生成器

[EB/OL],

.

c

om/zh/development-tools/.

*

[2]

小钢炮蓝牙开发板电路图

Cannon_V2_SCH[EB/OL],

/view/.

发布评论

评论列表 (0)

  1. 暂无评论