標(biāo)題:
用STM32F103讀取MPU605陀螺儀、加速度、角度的數(shù)據(jù)
[打印本頁(yè)]
作者:
FredZhu
時(shí)間:
2020-8-26 21:20
標(biāo)題:
用STM32F103讀取MPU605陀螺儀、加速度、角度的數(shù)據(jù)
1 介紹
大家從標(biāo)題中來看呢,大家可能會(huì)有些困惑,MPU6050只輸出加速度、陀螺儀。沒有角度。這個(gè)也是我今天想和大家說的。最近我做了一個(gè)傾角項(xiàng)目。老板基于成本考慮希望我能用MPU6050去算出來角度。說實(shí)話自己沒接觸這個(gè)東西,去搞的時(shí)候才知道挺難的,很地方看不懂。然后我去看過了正電原子的MPU6050的解算。但是那個(gè)角度的結(jié)果和我想要精度有點(diǎn)差別。無意中呢在淘寶上搜到了一個(gè)維特智能的JY61模塊。這個(gè)模塊的內(nèi)置的就是MPU6050模塊。這個(gè)商家說它的靜態(tài)角度的精度為0.05度、動(dòng)態(tài)0.1度。這個(gè)精度是很符合我的需求。給大家看下這個(gè)模塊
這個(gè)模塊體積很小巧就15×15×2mm大小。串口通訊用單片機(jī)去獲取數(shù)據(jù)很簡(jiǎn)單,相比起直接去獲取MPU6050簡(jiǎn)單不知道多少倍了。下面和大家說說我是怎么去用STM32F103讀取JY62陀螺儀、加速度、角度的數(shù)據(jù)。
2 開發(fā)準(zhǔn)備
講程序之前呢,和大家簡(jiǎn)單的說說一些硬件、軟件準(zhǔn)備和JY61怎么和STM32F103接線的。
2.1硬件、軟件準(zhǔn)備
硬件:JY61模塊、USB-TTL、STM32F103開發(fā)板、杜邦線。
軟件 :
https://pan.baidu.com/s/1SEWmixu4jtUL2HH_3Hcn2g
提取碼:zryo
這個(gè)是我的寫的一個(gè) 示例代碼大家有興趣的可以看下:
https://pan.baidu.com/s/1sXnlT89FTTs5tONLiaPihw
2.2 接線方式
1、使用USB-TTL將STM32F103C8T6與電腦連接通信
2、JY61與STM32F103C8T6使用杜邦線連接。具體接線如下圖所示:
具體接線方式如下:
USB-TTL---------------STM32F103C8T6---------------JY61
VCC-------------- VCC -------------------------VCC
TX-------------------RX1(PA10),PA3---------------------------TX
RX-------------------TX1(PA9),PA2----------------------------RX
GND------------------GND, GND----------------------------GND
3 程序講解
3.1程序思路講解
好了到大家最關(guān)心的地方了。在這里呢。我先和大家說下。我的整體思路是什么。我直接把我們的main.c函數(shù)放在下面給大家看下。
[backcolor=inherit !important]#[backcolor=inherit !important]include[backcolor=inherit !important]
[backcolor=inherit !important]<string.h>
[backcolor=inherit !important]#[backcolor=inherit !important]include[backcolor=inherit !important]
[backcolor=inherit !important]<stdio.h>
[backcolor=inherit !important]#[backcolor=inherit !important]include[backcolor=inherit !important]
[backcolor=inherit !important]"Main.h"
[backcolor=inherit !important]#[backcolor=inherit !important]include[backcolor=inherit !important]
[backcolor=inherit !important]"UART1.h"
[backcolor=inherit !important]#[backcolor=inherit !important]include[backcolor=inherit !important]
[backcolor=inherit !important]"UART2.h"
[backcolor=inherit !important]#[backcolor=inherit !important]include[backcolor=inherit !important]
[backcolor=inherit !important]"delay.h"
[backcolor=inherit !important]#[backcolor=inherit !important]include[backcolor=inherit !important]
[backcolor=inherit !important]"JY61.h"
[backcolor=inherit !important]#[backcolor=inherit !important]include[backcolor=inherit !important]
[backcolor=inherit !important]"DIO.h"
[backcolor=inherit !important]struct
[backcolor=inherit !important]SAcc stcAcc
[backcolor=inherit !important];
[backcolor=inherit !important]struct
[backcolor=inherit !important]SGyro stcGyro
[backcolor=inherit !important];
[backcolor=inherit !important]struct
[backcolor=inherit !important]SAngle stcAngle
[backcolor=inherit !important];
[backcolor=inherit !important]//CopeSerialData為串口2中斷調(diào)用函數(shù),串口每收到一個(gè)數(shù)據(jù),調(diào)用一次這個(gè)函數(shù)。
[backcolor=inherit !important]void
[backcolor=inherit !important]CopeSerial2Data
[backcolor=inherit !important](
[backcolor=inherit !important]unsigned
[backcolor=inherit !important]char
ucData
[backcolor=inherit !important])
[backcolor=inherit !important]{
[backcolor=inherit !important]static
[backcolor=inherit !important]unsigned
[backcolor=inherit !important]char
ucRxBuffer
[backcolor=inherit !important][
[backcolor=inherit !important]250
[backcolor=inherit !important]]
[backcolor=inherit !important];
[backcolor=inherit !important]static
[backcolor=inherit !important]unsigned
[backcolor=inherit !important]char
ucRxCnt
=
[backcolor=inherit !important]0
[backcolor=inherit !important];
[backcolor=inherit !important]LED_REVERSE
[backcolor=inherit !important](
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//接收到數(shù)據(jù),LED燈閃爍一下
ucRxBuffer
[backcolor=inherit !important][
ucRxCnt
++
[backcolor=inherit !important]]
=
ucData
[backcolor=inherit !important];
[backcolor=inherit !important]//將收到的數(shù)據(jù)存入緩沖區(qū)中
[backcolor=inherit !important]if
[backcolor=inherit !important](
ucRxBuffer
[backcolor=inherit !important][
[backcolor=inherit !important]0
[backcolor=inherit !important]]
!=
[backcolor=inherit !important]0x55
[backcolor=inherit !important])
[backcolor=inherit !important]//數(shù)據(jù)頭不對(duì),則重新開始尋找0x55數(shù)據(jù)頭
[backcolor=inherit !important]{
ucRxCnt
=
[backcolor=inherit !important]0
[backcolor=inherit !important];
[backcolor=inherit !important]return
[backcolor=inherit !important];
[backcolor=inherit !important]}
[backcolor=inherit !important]if
[backcolor=inherit !important](
ucRxCnt
<
[backcolor=inherit !important]11
[backcolor=inherit !important])
[backcolor=inherit !important]{
[backcolor=inherit !important]return
[backcolor=inherit !important];
[backcolor=inherit !important]}
[backcolor=inherit !important]//數(shù)據(jù)不滿11個(gè),則返回
[backcolor=inherit !important]else
[backcolor=inherit !important]{
[backcolor=inherit !important]switch
[backcolor=inherit !important](
ucRxBuffer
[backcolor=inherit !important][
[backcolor=inherit !important]1
[backcolor=inherit !important]]
[backcolor=inherit !important])
[backcolor=inherit !important]//判斷數(shù)據(jù)是哪種數(shù)據(jù),然后將其拷貝到對(duì)應(yīng)的結(jié)構(gòu)體中,有些數(shù)據(jù)包需要通過上位機(jī)打開對(duì)應(yīng)的輸出后,才能接收到這個(gè)數(shù)據(jù)包的數(shù)據(jù)
[backcolor=inherit !important]{
[backcolor=inherit !important]//memcpy為編譯器自帶的內(nèi)存拷貝函數(shù),需引用"string.h",將接收緩沖區(qū)的字符拷貝到數(shù)據(jù)結(jié)構(gòu)體里面,從而實(shí)現(xiàn)數(shù)據(jù)的解析。
[backcolor=inherit !important]case
[backcolor=inherit !important]0x51
:
[backcolor=inherit !important]memcpy
[backcolor=inherit !important](
&
stcAcc
[backcolor=inherit !important],
&
ucRxBuffer
[backcolor=inherit !important][
[backcolor=inherit !important]2
[backcolor=inherit !important]]
[backcolor=inherit !important],
[backcolor=inherit !important]8
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]break
[backcolor=inherit !important];
[backcolor=inherit !important]case
[backcolor=inherit !important]0x52
:
[backcolor=inherit !important]memcpy
[backcolor=inherit !important](
&
stcGyro
[backcolor=inherit !important],
&
ucRxBuffer
[backcolor=inherit !important][
[backcolor=inherit !important]2
[backcolor=inherit !important]]
[backcolor=inherit !important],
[backcolor=inherit !important]8
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]break
[backcolor=inherit !important];
[backcolor=inherit !important]case
[backcolor=inherit !important]0x53
:
[backcolor=inherit !important]memcpy
[backcolor=inherit !important](
&
stcAngle
[backcolor=inherit !important],
&
ucRxBuffer
[backcolor=inherit !important][
[backcolor=inherit !important]2
[backcolor=inherit !important]]
[backcolor=inherit !important],
[backcolor=inherit !important]8
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]break
[backcolor=inherit !important];
[backcolor=inherit !important]}
ucRxCnt
=
[backcolor=inherit !important]0
[backcolor=inherit !important];
[backcolor=inherit !important]//清空緩存區(qū)
[backcolor=inherit !important]}
[backcolor=inherit !important]}
[backcolor=inherit !important]void
[backcolor=inherit !important]CopeSerial1Data
[backcolor=inherit !important](
[backcolor=inherit !important]unsigned
[backcolor=inherit !important]char
ucData
[backcolor=inherit !important])
[backcolor=inherit !important]{
[backcolor=inherit !important]UART2_Put_Char
[backcolor=inherit !important](
ucData
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//轉(zhuǎn)發(fā)串口1收到的數(shù)據(jù)給串口2(JY模塊)
[backcolor=inherit !important]}
[backcolor=inherit !important]int
[backcolor=inherit !important]main
[backcolor=inherit !important](
[backcolor=inherit !important]void
[backcolor=inherit !important])
[backcolor=inherit !important]{
[backcolor=inherit !important]unsigned
[backcolor=inherit !important]char
i
=
[backcolor=inherit !important]0
[backcolor=inherit !important];
[backcolor=inherit !important]SysTick_init
[backcolor=inherit !important](
[backcolor=inherit !important]72
[backcolor=inherit !important],
[backcolor=inherit !important]10
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//設(shè)置時(shí)鐘頻率
[backcolor=inherit !important]Initial_UART1
[backcolor=inherit !important](
[backcolor=inherit !important]9600
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//接PC的串口
[backcolor=inherit !important]Initial_UART2
[backcolor=inherit !important](
[backcolor=inherit !important]115200
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//接JY61模塊的串口
[backcolor=inherit !important]LED_ON
[backcolor=inherit !important](
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]delay_ms
[backcolor=inherit !important](
[backcolor=inherit !important]1000
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]delay_ms
[backcolor=inherit !important](
[backcolor=inherit !important]1000
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//等等JY61初始化完成
[backcolor=inherit !important]while
[backcolor=inherit !important](
[backcolor=inherit !important]1
[backcolor=inherit !important])
[backcolor=inherit !important]{
[backcolor=inherit !important]delay_ms
[backcolor=inherit !important](
[backcolor=inherit !important]1000
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//串口接受到的數(shù)據(jù)已經(jīng)拷貝到對(duì)應(yīng)的結(jié)構(gòu)體的變量中了,根據(jù)說明書的協(xié)議,以加速度為例 stcAcc.a[0]/32768*16就是X軸的加速度,
[backcolor=inherit !important]printf
[backcolor=inherit !important](
[backcolor=inherit !important]"Acc:%.3f %.3f %.3f\r\n"
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAcc
[backcolor=inherit !important].
a
[backcolor=inherit !important][
[backcolor=inherit !important]0
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]16
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAcc
[backcolor=inherit !important].
a
[backcolor=inherit !important][
[backcolor=inherit !important]1
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]16
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAcc
[backcolor=inherit !important].
a
[backcolor=inherit !important][
[backcolor=inherit !important]2
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]16
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]delay_ms
[backcolor=inherit !important](
[backcolor=inherit !important]10
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//輸出角速度
[backcolor=inherit !important]printf
[backcolor=inherit !important](
[backcolor=inherit !important]"Gyro:%.3f %.3f %.3f\r\n"
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcGyro
[backcolor=inherit !important].
w
[backcolor=inherit !important][
[backcolor=inherit !important]0
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]2000
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcGyro
[backcolor=inherit !important].
w
[backcolor=inherit !important][
[backcolor=inherit !important]1
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]2000
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcGyro
[backcolor=inherit !important].
w
[backcolor=inherit !important][
[backcolor=inherit !important]2
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]2000
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]delay_ms
[backcolor=inherit !important](
[backcolor=inherit !important]10
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//輸出角度
[backcolor=inherit !important]printf
[backcolor=inherit !important](
[backcolor=inherit !important]"Angle:%.3f %.3f %.3f\r\n"
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAngle
[backcolor=inherit !important].
Angle
[backcolor=inherit !important][
[backcolor=inherit !important]0
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]180
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAngle
[backcolor=inherit !important].
Angle
[backcolor=inherit !important][
[backcolor=inherit !important]1
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]180
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAngle
[backcolor=inherit !important].
Angle
[backcolor=inherit !important][
[backcolor=inherit !important]2
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]180
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]delay_ms
[backcolor=inherit !important](
[backcolor=inherit !important]10
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//等待傳輸完成
[backcolor=inherit !important]}
[backcolor=inherit !important]//主循環(huán)
[backcolor=inherit !important]}
其實(shí)一共就分為三個(gè)部分。
第一部分,為串口2中斷調(diào)用函數(shù)CopeSerialData,串口每收到一個(gè)數(shù)據(jù),調(diào)用一次這個(gè)函數(shù)。把串口2獲取到的數(shù)據(jù)存在ucRxBuffer這個(gè)數(shù)組里。然后根據(jù)JY61的通訊協(xié)議(如下圖所示)去做一個(gè)數(shù)據(jù)檢驗(yàn)判斷。判斷完后呢,就到了一個(gè)memcpy這個(gè)復(fù)制函數(shù)。不懂這個(gè)函數(shù)的可以看這個(gè)鏈接:
運(yùn)動(dòng)傳感:STM32中的memcpy函數(shù)的使用
我和大家說個(gè)結(jié)果。比如說加速度,memcpy函數(shù)就是把ucRxBuffer的數(shù)據(jù)復(fù)制到stcAcc這個(gè)結(jié)構(gòu)體里了,剩下的以此類推。到這里這里的第一部分就結(jié)束了。
JY61的通訊協(xié)議
第二部分,CopeSerial1Data。很簡(jiǎn)單的就是轉(zhuǎn)發(fā)串口1收到的數(shù)據(jù)給串口2(JY模塊)。
第三部分,就是數(shù)據(jù)處理部分了。以加速度為例子。
[backcolor=inherit !important]printf
[backcolor=inherit !important](
[backcolor=inherit !important]"Acc:%.3f %.3f %.3f\r\n"
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAcc
[backcolor=inherit !important].
a
[backcolor=inherit !important][
[backcolor=inherit !important]0
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]16
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAcc
[backcolor=inherit !important].
a
[backcolor=inherit !important][
[backcolor=inherit !important]1
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]16
[backcolor=inherit !important],
[backcolor=inherit !important](
[backcolor=inherit !important]float
[backcolor=inherit !important])
stcAcc
[backcolor=inherit !important].
a
[backcolor=inherit !important][
[backcolor=inherit !important]2
[backcolor=inherit !important]]
/
[backcolor=inherit !important]32768
*
[backcolor=inherit !important]16
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]delay_ms
[backcolor=inherit !important](
[backcolor=inherit !important]10
[backcolor=inherit !important])
[backcolor=inherit !important];
stcAcc這個(gè)前面講了就是復(fù)制結(jié)束的結(jié)果。根據(jù)上面的JY61的通訊協(xié)議。/32768*16這些都是為了把JY61輸出的16進(jìn)制的原始數(shù)據(jù)轉(zhuǎn)成成有符號(hào)的10進(jìn)制的數(shù)據(jù)。然后把得到的結(jié)果輸出到串口1。
以上三個(gè)部分呢,就是我的主要編程思路了。下面給大家講講一些細(xì)節(jié)方面的函數(shù)。
3.2 關(guān)鍵底層函數(shù)說
從上面的接線可以看出呢。一共用了32單片機(jī)的兩個(gè)UART引腳。一個(gè)是UART1這個(gè)是把處理過的數(shù)據(jù)發(fā)送到PC端。一個(gè)是UART2這個(gè)是用來接收J(rèn)Y61傳過來的數(shù)據(jù)。UART2也是使用中斷來接收到數(shù)據(jù)。這些都是在初始化UART2的時(shí)候來配置的。前面那部分都是默認(rèn)的串口配置。設(shè)置波特率、數(shù)據(jù)位8位、停止位1、無奇偶檢驗(yàn)、配置串口模式。最后再初始化USART2。一般都是固定的。后面的USART_ITConfig。就是開啟串口中斷。
[backcolor=inherit !important]void
[backcolor=inherit !important]Initial_UART2
[backcolor=inherit !important](
[backcolor=inherit !important]unsigned
[backcolor=inherit !important]long
baudrate
[backcolor=inherit !important])
[backcolor=inherit !important]{
GPIO_InitTypeDef GPIO_InitStructure
[backcolor=inherit !important];
USART_InitTypeDef USART_InitStructure
[backcolor=inherit !important];
NVIC_InitTypeDef NVIC_InitStructure
[backcolor=inherit !important];
[backcolor=inherit !important]RCC_APB1PeriphClockCmd
[backcolor=inherit !important](
RCC_APB1Periph_USART2
|
RCC_APB2Periph_GPIOA
[backcolor=inherit !important],
ENABLE
[backcolor=inherit !important])
[backcolor=inherit !important];
GPIO_InitStructure
[backcolor=inherit !important].
GPIO_Pin
=
GPIO_Pin_2
[backcolor=inherit !important];
GPIO_InitStructure
[backcolor=inherit !important].
GPIO_Mode
=
GPIO_Mode_AF_PP
[backcolor=inherit !important];
GPIO_InitStructure
[backcolor=inherit !important].
GPIO_Speed
=
GPIO_Speed_50MHz
[backcolor=inherit !important];
[backcolor=inherit !important]GPIO_Init
[backcolor=inherit !important](
GPIOA
[backcolor=inherit !important],
&
GPIO_InitStructure
[backcolor=inherit !important])
[backcolor=inherit !important];
GPIO_InitStructure
[backcolor=inherit !important].
GPIO_Pin
=
GPIO_Pin_3
[backcolor=inherit !important];
GPIO_InitStructure
[backcolor=inherit !important].
GPIO_Mode
=
GPIO_Mode_IN_FLOATING
[backcolor=inherit !important];
[backcolor=inherit !important]GPIO_Init
[backcolor=inherit !important](
GPIOA
[backcolor=inherit !important],
&
GPIO_InitStructure
[backcolor=inherit !important])
[backcolor=inherit !important];
USART_InitStructure
[backcolor=inherit !important].
USART_BaudRate
=
baudrate
[backcolor=inherit !important];
USART_InitStructure
[backcolor=inherit !important].
USART_WordLength
=
USART_WordLength_8b
[backcolor=inherit !important];
USART_InitStructure
[backcolor=inherit !important].
USART_StopBits
=
USART_StopBits_1
[backcolor=inherit !important];
USART_InitStructure
[backcolor=inherit !important].
USART_Parity
=
USART_Parity_No
[backcolor=inherit !important];
USART_InitStructure
[backcolor=inherit !important].
USART_HardwareFlowControl
=
USART_HardwareFlowControl_None
[backcolor=inherit !important];
USART_InitStructure
[backcolor=inherit !important].
USART_Mode
=
USART_Mode_Rx
|
USART_Mode_Tx
[backcolor=inherit !important];
[backcolor=inherit !important]USART_Init
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
&
USART_InitStructure
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]USART_ITConfig
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_IT_TXE
[backcolor=inherit !important],
DISABLE
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//串口2的發(fā)送端TX是不使能的
[backcolor=inherit !important]USART_ITConfig
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_IT_RXNE
[backcolor=inherit !important],
ENABLE
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//串口2的接收端的RX使能
[backcolor=inherit !important]USART_ClearFlag
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_FLAG_TC
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]USART_Cmd
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
ENABLE
[backcolor=inherit !important])
[backcolor=inherit !important];
NVIC_InitStructure
[backcolor=inherit !important].
NVIC_IRQChannel
=
USART2_IRQn
[backcolor=inherit !important];
NVIC_InitStructure
[backcolor=inherit !important].
NVIC_IRQChannelPreemptionPriority
=
[backcolor=inherit !important]1
[backcolor=inherit !important];
NVIC_InitStructure
[backcolor=inherit !important].
NVIC_IRQChannelSubPriority
=
[backcolor=inherit !important]8
[backcolor=inherit !important];
NVIC_InitStructure
[backcolor=inherit !important].
NVIC_IRQChannelCmd
=
ENABLE
[backcolor=inherit !important];
[backcolor=inherit !important]NVIC_Init
[backcolor=inherit !important](
&
NVIC_InitStructure
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]}
使能串口中斷后呢。UART2的數(shù)據(jù)都會(huì)一個(gè)個(gè)字節(jié)的往DR寄存器里面寫。就是第一部分調(diào)用的那個(gè)中斷函數(shù)CopeSerial2Data。整體來就是給大家介紹下數(shù)據(jù)是怎么來的。底層中斷函數(shù)說明
[backcolor=inherit !important]void
[backcolor=inherit !important]USART2_IRQHandler
[backcolor=inherit !important](
[backcolor=inherit !important]void
[backcolor=inherit !important])
[backcolor=inherit !important]{
[backcolor=inherit !important]if
[backcolor=inherit !important](
[backcolor=inherit !important]USART_GetITStatus
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_IT_TXE
[backcolor=inherit !important])
!=
RESET
[backcolor=inherit !important])
[backcolor=inherit !important]//由于TX中斷被禁止了所以這個(gè)if是不會(huì)進(jìn)入的。
[backcolor=inherit !important]{
[backcolor=inherit !important]USART_SendData
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
TxBuffer
[backcolor=inherit !important][
TxCounter
++
[backcolor=inherit !important]]
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]USART_ClearITPendingBit
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_IT_TXE
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]if
[backcolor=inherit !important](
TxCounter
==
count
[backcolor=inherit !important])
[backcolor=inherit !important]USART_ITConfig
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_IT_TXE
[backcolor=inherit !important],
DISABLE
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]}
[backcolor=inherit !important]else
[backcolor=inherit !important]if
[backcolor=inherit !important](
[backcolor=inherit !important]USART_GetITStatus
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_IT_RXNE
[backcolor=inherit !important])
!=
RESET
[backcolor=inherit !important])
[backcolor=inherit !important]//直接進(jìn)入RX的這個(gè)中斷
[backcolor=inherit !important]{
[backcolor=inherit !important]CopeSerial2Data
[backcolor=inherit !important](
[backcolor=inherit !important](
[backcolor=inherit !important]unsigned
[backcolor=inherit !important]char
[backcolor=inherit !important])
USART2
->
DR
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]//把UART2的數(shù)據(jù)給到DR寄存器后呢,再由這個(gè)CopeSerial2Data函數(shù)把數(shù)據(jù)給到給出去了
[backcolor=inherit !important]USART_ClearITPendingBit
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_IT_RXNE
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]}
[backcolor=inherit !important]USART_ClearITPendingBit
[backcolor=inherit !important](
USART2
[backcolor=inherit !important],
USART_IT_ORE
[backcolor=inherit !important])
[backcolor=inherit !important];
[backcolor=inherit !important]}
## 6 輸出結(jié)果顯示
在電腦上正確連接好板子,首先打開串口調(diào)試助手,找到相應(yīng)的端口,然后打開串口,注意這里波特率設(shè)置為9600,然后就可以觀察到左邊的窗口有數(shù)據(jù)輸出了。如圖所示:
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1