这两天在玩STM32L0,但是串口怎么调试都有问题。数据位选择8B,显示如下:
2 j2 m" j7 {& ]$ s% o0 _% c! c0 k! Y$ H2 {5 c* V
( X2 | v9 U* w l( ^. g/ |
! ^6 `1 Y0 w! r* o2 Z4 d. x" R& K
数据位选择7B时:
' T# c. e' }4 ?
/ X3 E) L& ^5 w4 W+ s- S2 O# ~& B/ b0 a2 D$ p" b3 v5 J! N9 s
# ^5 F; w) \" q1 w0 Y3 {: ]4 |而我的输出应该是:printf("123456\n");printf("testing\n");) Z. L# ?' W: E$ |' L3 V* G7 R
下面时我的程序:2 {! l& i$ D9 Z& Y& S; F; P
0 F4 [. I/ ?: @" ?5 N
- //时钟初始化# S% M3 \) R, t. r2 S! K: u
- void SystemClockConfig( void ); j, H/ J3 m: r% g+ g
- {1 X+ M+ g0 j* w4 @) V
- RCC_OscInitTypeDef RCC_OscInitStruct;# e# g1 w4 d3 Y# i, C1 M+ C( k
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
5 @- k! O$ W9 |2 z: i' ~ - RCC_PeriphCLKInitTypeDef PeriphClkInit;
& g5 s3 ?9 Y, }: e0 {" D -
6 }0 G* X% W6 S5 o& Y -
8 V+ g# M3 R: {$ _ - __HAL_RCC_SYSCFG_CLK_ENABLE( );
; m, o. d) K3 R5 s. Y" p; o. X - __HAL_RCC_PWR_CLK_ENABLE( );: u# O1 T0 j( K* O: A( o, t
, o; S4 r6 j. v7 F* ]" a) v- __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 );8 i6 q$ V( p% a5 v$ J& @+ t) x& \
- // __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);9 L! D- j1 d: _! W& R
- ) M" V3 N7 m4 X% D
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE;//内部高速时钟8M 和 外部低速32.768K
: {! [3 {: L8 S ~" B5 j - RCC_OscInitStruct.HSIState = RCC_HSI_ON;' Z+ F/ c, }+ y
- RCC_OscInitStruct.LSEState = RCC_LSE_ON; 6 M2 i, J- s/ d
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
, U; C& O1 \' W/ F - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;7 q% X8 l: L. u" P
- RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
( H1 L+ l: T* C- O4 T! K L1 g2 V - RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;. Q9 Z6 ~. R K8 ]
- if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK )7 x8 D- R- R4 I+ I+ w8 q
- {
3 v% M9 `. j w/ O( ?) \ - assert_param( FAIL );% j& W% a, q3 E9 N* S6 ~4 N
- }
# S2 |: R8 c+ }# O5 W
" _* ~. F5 K3 H4 K6 O. t- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
* G: G0 H- R5 K - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;: y( I' c5 u3 X# N" Z0 ~* |
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
5 {: y9 h( K: ?' ~+ z1 \ - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
& k2 u# y/ W, g# `. N - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
/ p$ @. A/ i& d, X7 f - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;9 I( t! z2 i" K. n- t
- if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK )
+ h h5 k; ?" D3 U - {. H# {- r0 z* G# D) _3 a( Z9 N
- assert_param( FAIL );" a7 q2 U5 c/ ~
- }
9 s2 S) f$ c! f6 u! D- J
7 O: V2 P- ^% H9 K" Q q- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC;- ]3 _* ?- l( `
- PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;! ]+ _9 d- e1 @$ `+ U
- PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;- N" D2 E5 U/ I. Z4 n. S
- PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
+ n) T+ |" D. ]9 t - if( HAL_RCCEx_PeriphCLKConfig( &PeriphClkInit ) != HAL_OK )7 ~" t+ U* P# y2 r# v8 }5 j/ p
- {
. e- M' u& I* v; M - assert_param( FAIL );
$ p |' Q* m3 H0 n; o+ B0 { - }+ Q+ ~5 u" V2 Y: f: e9 G. T6 R* ^
3 O8 `* p' h: z- v2 [ ~% X- HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );
; d1 Q9 d/ Z3 Z& T
4 }7 m `2 _' f% G0 h+ d. E+ j- HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );
D& I! l) Y: Z
: E4 x N1 }! K* f4 }- // SysTick_IRQn interrupt configuration& A% ?4 @* \0 s, K3 d: L
- HAL_NVIC_SetPriority( SysTick_IRQn, 0, 0 );
% L; T( x& A+ ]. I; R - }
复制代码 ! J/ G, P6 D* S7 q2 U, }3 D
UART.C8 r+ Y. Z# u W: e. `
- /******************************************************************************4 h7 o, Y2 D, T4 T
- * Copyright 2017-2030 DaPu Co./ D% e% f; |! x: x) @8 c
- * FileName: uart_new.c 2 l" j' v9 m" Y! W- R
- * Desc:
) T l; ^8 }( D7 o" m0 P - * . S+ F& s7 _8 Y
- * 0 A6 i/ f7 l: r2 x
- * Author: CGH2 v+ H4 p4 }0 H
- * Date: 2017/10/12
& Y) T+ }9 b( z- B1 W; [ - * Notes:
7 c2 o* }- F( J2 \/ V( r7 ? - *
5 m5 I+ @/ _ \" ?2 n# h - * -----------------------------------------------------------------
5 q9 y5 t& q) w7 @ - * Histroy: v1.0 2017/10/12, CGH create this file, R' ~4 j/ F- m. T
- *
) k# m% q I: D7 S8 ]; O - ******************************************************************************/
) F3 v; Y+ q5 u' y - /*------------------------------- Includes ----------------------------------*/
$ C1 t c( x7 T0 z; P - #include "board.h"
4 @+ X) F4 r, E: A6 i0 h4 o - #include "uart_new.h"
, Z' R4 ?" K+ o; M - #include "gpio.h"
1 i& K2 V; h9 A% o - #include "delay.h"
& }+ |( M) d! f" `4 { - /*------------------- Global Definitions and Declarations -------------------*/
. N6 s; Q/ y# |- Y - /*------------------------ Constant / Macro Definitions ---------------------*/( X+ M. h m6 X6 t7 c% |8 N
- /*------------------------- Type Declarations -------------------------------*/
! f, ^$ T" c( u. B7 K - /*------------------------- Function Prototype ------------------------------*/. \! }, z/ k3 `/ n
- /*------------------------- Variable Declarations ---------------------------*/% ?6 A) B) M% O: ~+ ]% ?
- UART_HandleTypeDef husart_debug;. |) W% C' |7 f" j1 U9 `
- uint8_t RxDatabuf;8 m$ {0 a* Z4 a0 L) j2 a! _
- /*------------------------- Function Implement ------------------------------*/
9 k' G& e H7 ?" g( {, u" I6 g; i# | - /**# k/ f% J* d8 l( ^( q; |
- * 函数功能: 串口硬件初始化配置$ `9 z d/ d$ l0 w; ?8 }
- * 输入参数: huart:串口句柄类型指针
5 W1 l- B* I; A* P - * 返 回 值: 无
+ r3 |8 n6 _9 S& r! @8 `0 k+ } - * 说 明: 该函数被HAL库内部调用3 {6 A% ^+ ?) i$ b
- */# K- V. _/ T* `4 x" \/ ]' P' a
- void HAL_UART_MspInit(UART_HandleTypeDef* huart) u" }' S5 B' m' g; l
- {; [, u2 ~) u. K6 H7 \+ `# q8 N6 F
- + l+ Y+ m- O6 K4 h5 ^
- GPIO_InitTypeDef GPIO_InitStruct;
. X0 L7 v- a- Y$ g; e# Z - Gpio_t TX,RX;
/ S }) I- z2 x' `# g* e* y
0 A8 R! y& S, T% r: B- if(huart->Instance==DEBUG_USARTx)
2 A: t9 l, m3 a, u - {! B5 t1 F s" M
- /* 串口外设时钟使能 */" G' O9 ~9 F# v. y5 B
- DEBUG_USART_RCC_CLK_ENABLE();9 A3 U& M7 W5 C4 t* [
$ c8 P. U/ K& W4 {6 Z v- DEBUG_USARTx_GPIO_ClK_ENABLE();7 n3 ] Q4 u; M8 k0 Z3 ^: ~/ \. F
- % l" ~( x$ ~* E6 b1 X% L) ?& t8 w
- /* 串口外设功能GPIO配置 */5 p( ^& d+ B- Q0 Y9 D4 B6 j8 N
- //GpioInit( &TX, UART_TX, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 );- ~. w, H h4 x+ _8 Q
- //GpioInit( &RX, UART_RX, PIN_INPUT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 ); 6 w/ V9 K& I% p% T4 a
- & D# R, E+ O. x- m
- GPIO_InitStruct.Pin = DEBUG_USARTx_Tx_GPIO_PIN;* x% U& L: I) L# o) R0 I: d7 B7 U8 N
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;( g0 j Q/ t% h
- GPIO_InitStruct.Pull = GPIO_AF4_USART1;
/ O& t2 J" k* t4 h - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;3 o6 u/ P: E4 L5 {! i3 x
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
: m9 D8 g& W% V, m, S& E/ s - HAL_GPIO_Init(DEBUG_USARTx_Tx_GPIO, &GPIO_InitStruct);
8 D2 I1 z( B2 d: l
; f1 a: R* T6 m) C) S8 E N- GPIO_InitStruct.Pin = DEBUG_USARTx_Rx_GPIO_PIN;
/ a5 ]7 F( A E5 r9 ?2 F8 P4 l; A( h - GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
/ m( ^/ x5 W/ f) x - //GPIO_InitStruct.Pull = GPIO_NOPULL;
& E! {: ^, |" S+ M R - GPIO_InitStruct.Alternate = GPIO_AF4_USART1;; t: I, Z# O$ J: {: `
- HAL_GPIO_Init(DEBUG_USARTx_Rx_GPIO, &GPIO_InitStruct);
+ g, x) J3 X1 @1 f+ q
% d/ V* V0 S5 o! N6 j- GpioWrite(&Led2,1);
8 ^3 a: X3 e' { i3 C- _/ G! S - Delay(3);
t" k! ]" L( A* r: \5 W0 x4 J - }9 H w- N+ K o6 U! _' X
- }' W' m5 m8 N* o) k0 i( B$ S6 P
- 6 S2 {7 o& z4 g' O2 X* j' Z
- /**
% p8 f; r6 I( D# [, L- H - * 函数功能: 串口硬件反初始化配置
3 A$ Z# p9 C9 X) S& p' Z( N+ K - * 输入参数: huart:串口句柄类型指针5 M; }% R; E* a, J5 n
- * 返 回 值: 无, C& H; N0 f5 x5 q3 H
- * 说 明: 该函数被HAL库内部调用
, J% `& J' i/ i. \, q* F: D - */
1 m0 V1 d8 C8 s2 ]% |4 w L1 S3 Q - void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
5 R. ]! ~4 n- u/ E - {
1 L' F9 L% w* a1 o0 O8 y' G - if(huart->Instance==DEBUG_USARTx): F# h8 L& t$ Y. r, y$ e
- {
1 J& | s, R. _8 G. q) d9 A - /* 串口外设时钟禁用 */
. E% ^4 o0 r0 R A - DEBUG_USART_RCC_CLK_DISABLE();
1 ?, \7 E9 Z, H2 k# o$ _
. G" H* b: @1 t5 c; z6 ~. V- T* K- /* 串口外设功能GPIO配置 */
- a0 `& R/ I9 M! S" W6 J! S - HAL_GPIO_DeInit(DEBUG_USARTx_Tx_GPIO, DEBUG_USARTx_Tx_GPIO_PIN);
4 i, m: e# ^; _" v& I; ] - HAL_GPIO_DeInit(DEBUG_USARTx_Rx_GPIO, DEBUG_USARTx_Rx_GPIO_PIN);5 u0 j6 r2 s; W1 i1 u! t( p
! A9 u. S+ R L9 w) C" x- /* 串口中断禁用 */0 M- z" ^+ `) Y9 d! H5 w
- HAL_NVIC_DisableIRQ(DEBUG_USART_IRQn);
: Z7 ^9 Y! j L, Z4 @ - }2 N+ c; x1 l1 ` d5 F
- }0 _* o& v o7 ]4 l+ A
- + {$ p. @* u3 }- I& G+ G
- /**$ V; y3 u) a, r. ~8 J
- * 函数功能: 串口参数配置.
: I" e: M/ |% ~- N0 P - * 输入参数: 无
8 W c( N7 U0 Y* ?5 ` - * 返 回 值: 无 l" ?4 q3 s3 w
- * 说 明:无/ w3 i# S7 }" s& v% H$ h" \
- */8 |5 k& [7 `' w* R5 h
- void MX_DEBUG_USART_Init(void)! _- r- l5 N& b
- {
- J! c U# M: b- W0 o7 R7 t - int ret = -1;
: S* F, n( ?1 Q- Z9 j
; m9 T0 L: {6 J# m3 v' x' p' J- __HAL_RCC_USART1_FORCE_RESET( );
3 B) k8 \: R3 E' K) s - __HAL_RCC_USART1_RELEASE_RESET( );
1 p) {' p4 j! W - __HAL_RCC_USART1_CLK_ENABLE( );+ ^/ n( F; _0 W% g, L8 O
- /* 使能串口功能引脚GPIO时钟 */
8 w9 s$ V2 e% K9 t - DEBUG_USARTx_GPIO_ClK_ENABLE();
* B5 Z6 ^, Z6 t - 3 S5 Y x: e6 W0 N2 e
- husart_debug.Instance = DEBUG_USARTx;
; T5 J% }2 M/ [+ k0 I8 a - husart_debug.Init.BaudRate = DEBUG_USARTx_BAUDRATE;- l) c2 L) \( x& _7 w" b' ?
- husart_debug.Init.WordLength = UART_WORDLENGTH_8B;7 u1 R, `8 y& [2 W' c
- husart_debug.Init.StopBits = UART_STOPBITS_1;
% @+ |- e5 H8 Y/ e2 s - husart_debug.Init.Parity = UART_PARITY_NONE;2 A% w) _( `! D( d% ~: n
- husart_debug.Init.Mode = UART_MODE_TX_RX;* Q# [9 a+ `, o1 ]' Y: |1 z; L- K$ ]
- husart_debug.Init.HwFlowCtl = UART_HWCONTROL_NONE;
& G" q [9 S/ \5 P" s4 H- v - husart_debug.Init.OverSampling = UART_OVERSAMPLING_16;
' Q" [6 E- j0 z3 m1 Z7 z - ret = HAL_UART_Init(&husart_debug);( |5 V# X: x7 ^3 a
- if(ret != HAL_OK)6 r/ T& o# p0 G2 O: w6 Q+ P% H9 u1 G
- {
& T2 P1 S y2 T8 ~' b0 W( x+ u& | - GpioWrite(&Led2,0);
% m" \* A7 ^% l' A r! u4 { - }8 P* b/ `' Y7 D; J( v5 G
- else
2 Q" G `$ C8 D' g! f% J! p9 G/ n1 q v - {
1 a3 a& j0 ^4 u8 w g) t# ^ - GpioWrite(&Led3,1);
/ b. m7 Z g6 B# g - }" ?- l4 K# w* o% J5 q6 _* ]+ x9 m% D
- /* 串口中断起用 */, _8 E- G6 X# C, {
- , Q+ f, I( E- k- ]# n% @4 h
- HAL_NVIC_SetPriority( USART1_IRQn, 1, 0 );
0 i% w& i" o- E Y - HAL_NVIC_EnableIRQ( USART1_IRQn );
' O& S! m* S% i4 s% o
7 t7 O% c! S- c7 k! G3 @* Y- /* Enable the UART Data Register not empty Interrupt */$ d H/ d! z* N {' e
- HAL_UART_Receive_IT( &husart_debug, &RxDatabuf, 1 );
2 S" x3 h5 e" w - }
复制代码 * m$ U/ j0 P) R, q) W
UART.H
9 C) e: g9 I* A- /******************************************************************************
2 Z8 f" H q/ v: k$ P2 S1 ^) D - * Copyright 2017-2030 DaPu Co.& s9 {: E6 [1 x- z! H
- * FileName: uart_new.h ) T# l) X! b( n: g
- * Desc:9 N! n: q6 ?7 u! ~" i* M4 ^4 x* Y
- * ! d% m' X& c# c$ G
- *
, k* j3 d! Q% S% t9 r - * Author: CGH4 W3 A3 M) G* D* T8 t2 l
- * Date: 2017/10/12
8 o1 S& J! \, g$ _+ j - * Notes:
: H, ]% \0 _" c9 J+ t - * + Y. W6 C s$ Q5 p) l2 l
- * -----------------------------------------------------------------
& a- Y2 x% {, I7 v" q+ t( c5 `+ m* } - * Histroy: v1.0 2017/10/12, CGH create this file
. x9 F" P6 r# R+ v1 ?7 ]9 Z - * # d) f9 g) g3 V7 y s0 U3 |
- ******************************************************************************/
* B/ g) L9 Q% t4 C3 t* V - #ifndef UART_NEW_H
$ w8 P+ b/ P0 p* e8 f+ Z8 _- f - #define UART_NEW_H! J4 {# @3 c* k& P& j1 S8 n
- /*------------------------------- Includes ----------------------------------*/
1 x K" Y7 P: z/ | - #include "stm32l0xx_hal.h"
+ M, t2 g6 M" A2 [' x- x9 |; a$ Z; N" j - #include <stdio.h># z) a) L! q X0 e: X+ W
- ( ^* E: V/ B/ C
- /*----------------------------- Global Defines ------------------------------*/2 `: I1 H* g; R# F
- #define DEBUG_USARTx USART1
" F3 q3 n4 i5 P ?* p1 H/ k/ {( Q - #define DEBUG_USARTx_BAUDRATE 9600
* a2 B N7 g/ M - #define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART1_FORCE_RESET();\\
( y0 t5 c: G. F$ [& |- M- r - __HAL_RCC_USART1_RELEASE_RESET();\\" B, T7 z; Z1 z( E- {) v2 t
- __HAL_RCC_USART1_CLK_ENABLE()1 E) N: Y) [1 P
- #define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()% ? M- m/ y& M& ?
- # d0 ~: S1 g, s/ z- {
- #define DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE(): j8 X* U' N! B
- #define DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_99 ?. n4 R% F1 _, m1 E% f" |
- #define DEBUG_USARTx_Tx_GPIO GPIOA! [0 A+ f" V0 F8 _8 y, R' R* V; P1 r
- #define DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_10
: K% X5 z4 A9 q& ? - #define DEBUG_USARTx_Rx_GPIO GPIOA) A" [9 b8 N! D5 M! D
) h a8 T6 ^. o3 `1 c+ K- #define DEBUG_USART_IRQn USART1_IRQn& \+ D4 b6 K. ?; a5 H
- 6 R- k. g) l7 J. D# r, I
- /*----------------------------- Global Typedefs -----------------------------*/
( g* S7 s3 F( x3 y) w% j - /*----------------------------- External Variables --------------------------*/6 V% D# Y2 R% V Y1 Q! k; U7 A
- extern UART_HandleTypeDef husart_debug;
3 I( a4 S4 H1 G' J( v0 E
" D0 N: u6 \1 Q) J- /*------------------------ Global Function Prototypes -----------------------*/* E0 d( ~5 C/ k- n# L
- extern void MX_DEBUG_USART_Init(void);) V; i7 n8 e, i, j9 K8 \! E
, L' I3 r8 a4 ^# K3 p
0 {0 Q1 \4 w3 L8 [0 O. k" T- #endif
4 B; Y. U6 o, g/ z
复制代码 5 o* a! _* A( m% r
* s% b7 k% _# r+ e, o
|