这两天在玩STM32L0,但是串口怎么调试都有问题。数据位选择8B,显示如下:
7 F: {' [ }( l; ~$ y+ J, Q+ |! L
2 y( s2 n* p3 I8 r
# L9 M$ [7 }9 O: w: Z- \
数据位选择7B时:
/ m' j" N( a! S4 A3 m6 v U: y/ ]& U- {# j p F
" a8 N2 t1 U! b) L* g
) x) ~/ N# ?, x3 B而我的输出应该是:printf("123456\n");printf("testing\n");, O6 `0 C4 O- S" L
下面时我的程序:9 I8 v0 |2 s+ W. w j2 ?
! P g& l/ G; X2 A
- //时钟初始化
) R2 I( Q& c- W - void SystemClockConfig( void )
5 S; c+ h# ]) p1 L. t' ~" T% V7 w/ J1 x - {2 C% t0 F3 e, y3 b
- RCC_OscInitTypeDef RCC_OscInitStruct;# J$ c6 l$ k" C8 G! H
- RCC_ClkInitTypeDef RCC_ClkInitStruct;2 B& R1 v; b. ?* v- d0 m5 T1 z
- RCC_PeriphCLKInitTypeDef PeriphClkInit;" A/ S0 a4 s+ Q* t* e3 w+ a
- W f# R. J2 V% G2 `
- 7 U! k- c2 u) Y p; B; L( ]
- __HAL_RCC_SYSCFG_CLK_ENABLE( );- r: F0 v2 f% s9 A: J# x
- __HAL_RCC_PWR_CLK_ENABLE( );% B/ ` [" V+ Y, W2 I2 y2 [
l" S ?% P" h- E0 b- x" e- __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 );/ K( `8 @6 d* u) I4 L( Q
- // __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
* @" U; O8 V; |' F0 e `1 W -
9 F0 G) G# n+ u! z# ^9 ? - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE;//内部高速时钟8M 和 外部低速32.768K; x( @+ [/ u5 E" O3 k# Q- F" x0 Q4 E3 ^
- RCC_OscInitStruct.HSIState = RCC_HSI_ON;0 {+ K: |; U' f- S. H
- RCC_OscInitStruct.LSEState = RCC_LSE_ON;
' u8 x( v7 l7 S3 I/ R e - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;' O; N) E, r: u! g) X/ f0 b
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
% l* p- l+ y" ?7 c' c/ l - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
2 K, w% V% c. K- B - RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;* c0 F+ T ?( z2 C8 [ r
- if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK )
+ U( t1 v) Z8 i - {+ r) p/ j. e1 R& C7 s' O S% Y H
- assert_param( FAIL );7 O; p2 w. p( C2 C& i2 P, x
- }
# }0 F! w# z4 d( ]
) E! a; B# Q* @# f- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
' T4 f7 ~! [* B- m6 g# @ - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
, @' Q# z/ t! ] s0 j/ b4 S - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;5 o" p4 V7 D4 g3 ~& r8 h: k. s8 \% j
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;7 H9 c& _4 L" u" H
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;: T8 \" ^& u6 Z# F$ n
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;* x* Q7 T U, m$ ^ f
- if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK )1 v Y+ U# t4 ]% T9 i; o
- {% g' j4 Z3 L- _3 f( D
- assert_param( FAIL );8 M. W7 Z) Y1 W. K9 @/ L; x' g% Z
- }
! R$ r- b" m# e0 B - $ J! ?8 @: W) m- h) l& E6 q
- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC;
+ C1 R' B* a5 }+ v& T - PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
! f" W7 G( v4 l, @- m* k - PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;
r* s+ X" o* x - PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
1 m* k' I# q, T, O E( b3 L5 g/ q- S - if( HAL_RCCEx_PeriphCLKConfig( &PeriphClkInit ) != HAL_OK ). A0 I( X" b ~) ?! G+ X5 [8 j4 }
- {
* ~1 x5 d2 v6 a4 i8 h6 L8 T - assert_param( FAIL );5 Y3 Y# M! }% D
- }! [5 a0 M O1 w8 ?+ y1 z
- 2 I* a/ P6 |9 s* ~, M% y* a
- HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );( a) G: l) x7 i
2 a* R% \$ Z! f: d. R/ }- HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );" V/ c0 L* h$ D1 d3 F
- $ T, J! W7 L- R# Q
- // SysTick_IRQn interrupt configuration! H% y! u1 k, W2 `( r8 t+ i
- HAL_NVIC_SetPriority( SysTick_IRQn, 0, 0 );
' b6 z& P/ Y& }4 V4 G - }
复制代码 5 S: |: k+ b2 U
UART.C
8 f' P* M1 {, I- /******************************************************************************* N @' w/ ]8 w. E0 G5 _3 O
- * Copyright 2017-2030 DaPu Co./ Z" ~: v, m7 t6 K( C; {
- * FileName: uart_new.c
6 r. @2 B4 C w: R: n - * Desc:
+ j9 p* h9 W9 L5 V, p p) S - *
0 z0 u: c; o; Z! p5 ]$ ]' w5 ^ - * ( ?* {# q! i5 V Z0 \! m# y
- * Author: CGH. g5 N/ s* ]! r" r" @( S" u- H. w
- * Date: 2017/10/12
/ N7 v1 T" I+ Z& Q - * Notes:
R" Q8 x3 o- U0 R1 v% R - * 3 L& W9 N+ R2 q! g0 s
- * -----------------------------------------------------------------
) x7 E# M, }( V( C6 i! V, |1 @ - * Histroy: v1.0 2017/10/12, CGH create this file
7 j$ g1 _0 B! y, W8 o - * " Z; o9 ^; R8 _( ]- X* L
- ******************************************************************************/. M' k/ D' M) R% X) k( p
- /*------------------------------- Includes ----------------------------------*/
* @% w3 R0 n( y, r) I/ J% E4 [& R - #include "board.h"( Y. m4 i7 t& ?8 j
- #include "uart_new.h"0 c ^5 u+ O& I5 T
- #include "gpio.h"
) o" ~$ W" ^- P& p8 C5 R. D; H - #include "delay.h"/ y/ q# z8 z& ^7 E5 C+ r
- /*------------------- Global Definitions and Declarations -------------------*/
: ^. z# ^2 v2 W' i4 u) Q+ G) V/ x5 S - /*------------------------ Constant / Macro Definitions ---------------------*/% a n/ s8 z$ e
- /*------------------------- Type Declarations -------------------------------*/
9 U+ k! u6 |: ~) Y# b - /*------------------------- Function Prototype ------------------------------*/5 {; E p2 G, B4 Z' | G
- /*------------------------- Variable Declarations ---------------------------*/
; p) D5 y+ n% r8 \# i8 Z2 k - UART_HandleTypeDef husart_debug;' k4 ]! Y, C/ x
- uint8_t RxDatabuf;8 W$ F% P4 y8 L+ m/ a
- /*------------------------- Function Implement ------------------------------*/
+ q* p6 Q$ W/ e: U7 o - /**
. w8 V$ E' |, Y - * 函数功能: 串口硬件初始化配置
0 y9 }: q8 r& U k - * 输入参数: huart:串口句柄类型指针
+ F7 z9 l Y1 u0 ? - * 返 回 值: 无
5 [! h& C+ X- Q+ \: C. i% W0 w. v# d - * 说 明: 该函数被HAL库内部调用
* f. R' \# b4 I" k- b - */) V& Y; X7 ]1 w2 k5 S/ |# z8 i$ W
- void HAL_UART_MspInit(UART_HandleTypeDef* huart)
5 V# O4 [$ O" e" M6 ?/ X/ d - {
; x7 v& B& k5 M& K9 Q8 h - 6 `1 s b" f! e; s9 j9 a
- GPIO_InitTypeDef GPIO_InitStruct;
# f- A- f' p7 M# m - Gpio_t TX,RX;; V N' L2 _9 p7 G) J: q) f
- # i+ z2 f" P0 a/ p
- if(huart->Instance==DEBUG_USARTx)6 W4 I2 \! J$ J! G. K
- {
7 }& R# s4 t9 D1 A - /* 串口外设时钟使能 */* f6 A/ U6 @& | Y
- DEBUG_USART_RCC_CLK_ENABLE();
0 J, A) g) x' J$ ]9 c
- O7 d M0 L. [9 a! K5 l& }( N, h- DEBUG_USARTx_GPIO_ClK_ENABLE();+ t6 {" l& C( s0 n
- $ e& K0 C0 A. Q u$ Q% _
- /* 串口外设功能GPIO配置 */
5 f" G% Q: L( x, I) z - //GpioInit( &TX, UART_TX, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 );
2 _! c& h+ G. {' Q3 {% [ - //GpioInit( &RX, UART_RX, PIN_INPUT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 );
% }% M+ [5 h% |( M
0 ?, V' o0 C# a5 N9 T- GPIO_InitStruct.Pin = DEBUG_USARTx_Tx_GPIO_PIN;
5 y, b6 h- v4 ]% h, _4 W - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;3 {8 @. M; K0 k* ^/ }5 W
- GPIO_InitStruct.Pull = GPIO_AF4_USART1;- n6 ^2 Y) K( J3 v
- GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
3 v9 O4 ]8 I! V2 d8 | - GPIO_InitStruct.Alternate = GPIO_AF4_USART1;* X1 {8 E8 Z- z4 `
- HAL_GPIO_Init(DEBUG_USARTx_Tx_GPIO, &GPIO_InitStruct);1 Q; f0 T8 a$ h0 x( T, ~ B
$ I) e; k9 Y( `8 H5 R$ o( d- GPIO_InitStruct.Pin = DEBUG_USARTx_Rx_GPIO_PIN;
5 b" O5 r2 l6 d/ L. d' `4 y5 ` - GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
4 h$ Y; j$ S4 ^/ T' M8 P - //GPIO_InitStruct.Pull = GPIO_NOPULL;- ^- j) l* k" c9 X& N. L1 k
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;1 P/ h3 @: a: T# ?* ~
- HAL_GPIO_Init(DEBUG_USARTx_Rx_GPIO, &GPIO_InitStruct);
7 o3 \) i t1 C e; u - 8 g& S8 t5 R- n5 J
- GpioWrite(&Led2,1);
) i" `* v' N/ y3 n' \9 ?) \ - Delay(3); F' f/ ~5 V1 f5 ]: z) S/ q
- }/ u9 g& A, L2 B7 V" o9 @, o
- }+ b7 G. ?' [# C, {0 j& p0 ?: k
- 1 r6 @0 M/ x- {/ Z- {
- /**
7 s/ Z: X' Q1 G - * 函数功能: 串口硬件反初始化配置& x1 Y* B( ?2 q- |3 l% N7 b
- * 输入参数: huart:串口句柄类型指针% H1 K% P; i& T, z/ r. h" D6 m
- * 返 回 值: 无
! {* i& p3 F# r: } - * 说 明: 该函数被HAL库内部调用: t& p# ~; W8 a& K5 I9 C, a
- */. o$ ?/ U$ p# ~& E/ V r
- void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
% i( H# ?$ \: c; w+ d - {
\/ z4 f8 [5 H. p* P( ^ - if(huart->Instance==DEBUG_USARTx)4 g9 ]' }+ X0 K/ f, P7 o
- {
& j7 F; Z5 p8 x+ u# h# _ - /* 串口外设时钟禁用 */; D7 R* I% m; G1 V2 A5 v
- DEBUG_USART_RCC_CLK_DISABLE();" P8 E; S& g1 Y% \' y
) l4 Y. v: O; h. m) @- /* 串口外设功能GPIO配置 */: O2 n; p& E& w( ~. @, {
- HAL_GPIO_DeInit(DEBUG_USARTx_Tx_GPIO, DEBUG_USARTx_Tx_GPIO_PIN);/ [9 v8 C$ p! U* i* I+ z5 ^+ R9 F
- HAL_GPIO_DeInit(DEBUG_USARTx_Rx_GPIO, DEBUG_USARTx_Rx_GPIO_PIN);
9 I* r* H$ G9 I7 s) Z" s1 _ - & g% g0 I+ O9 f; W5 m. ~
- /* 串口中断禁用 */1 M. ~4 W9 e% q) K! J P
- HAL_NVIC_DisableIRQ(DEBUG_USART_IRQn);
* g8 g/ {0 H. i% _ - }
7 J6 Z: ?4 U- ?, m, A3 R+ U3 P - }
- V7 R) e# e" T, v' k; k: Q
3 H d9 x4 j2 } G2 |( V- N- /**
2 w. H7 i2 `! a e& b - * 函数功能: 串口参数配置.
5 g1 j6 M$ A# u# u8 o6 k - * 输入参数: 无
! ?& Y% l: @0 C* h' T! t/ P - * 返 回 值: 无
, O0 @3 L3 _, c( }+ |. u- o7 q - * 说 明:无$ D9 t3 V5 R6 M1 G4 o
- */
3 p2 a( Y8 Z, U - void MX_DEBUG_USART_Init(void)& S/ x3 A7 Q7 \5 l+ T( _
- {
/ G5 e7 [( V: g7 t, k( O+ H0 T) J - int ret = -1;
}& T; w1 D+ D1 l& r - * Y# j+ h% i5 ?1 ^, ?& g0 C0 {( q3 g
- __HAL_RCC_USART1_FORCE_RESET( );5 u4 u+ S( Y7 U6 e
- __HAL_RCC_USART1_RELEASE_RESET( );& ]2 k& T. t. ^6 p
- __HAL_RCC_USART1_CLK_ENABLE( );, L& L# l3 m9 \7 v4 G
- /* 使能串口功能引脚GPIO时钟 */
) g6 F1 A5 ]; e/ N - DEBUG_USARTx_GPIO_ClK_ENABLE();
& p# g# l! z( i$ I& s O* O7 j& G - 4 r$ q& H- y' Y7 B! x
- husart_debug.Instance = DEBUG_USARTx;4 ~5 E8 a1 T, d& x
- husart_debug.Init.BaudRate = DEBUG_USARTx_BAUDRATE;8 l' R5 R; d% m# J% h" m2 C x+ d
- husart_debug.Init.WordLength = UART_WORDLENGTH_8B;
7 W/ r! Z* M' w2 e l+ N - husart_debug.Init.StopBits = UART_STOPBITS_1;
( C1 Z% a" q& a9 M - husart_debug.Init.Parity = UART_PARITY_NONE;3 r- F7 W0 q# k, R8 u9 g( }
- husart_debug.Init.Mode = UART_MODE_TX_RX;! s' Z; Z3 S: `6 q. ~ j
- husart_debug.Init.HwFlowCtl = UART_HWCONTROL_NONE;% C# _: M7 a, | ~# t
- husart_debug.Init.OverSampling = UART_OVERSAMPLING_16;
. a6 ]" ?# u- |, K - ret = HAL_UART_Init(&husart_debug);
/ j( S7 o) K1 @) t& j8 E- A' S& k: [) z - if(ret != HAL_OK)
9 L# ?; s! z. m$ n9 o) [ - {0 Q7 ^8 ^0 r% ^, i1 y, k
- GpioWrite(&Led2,0);
% g5 r5 v# X8 _6 A2 ]# J }. n) k - }
( D; d& f8 h" k# b - else
5 K4 Q, k; G, X4 n4 Q - {, {; {. l( V0 L; H
- GpioWrite(&Led3,1);
, E5 p4 [% b* {& y k- L: J - }9 K% [, K7 b/ e7 D, ~8 x7 v2 s
- /* 串口中断起用 */3 L3 Q. ^) s7 p! R% l8 o
- * j# |' R4 |4 Z" T- S& _3 v7 g
- HAL_NVIC_SetPriority( USART1_IRQn, 1, 0 );
3 ~; e& V% ]" l( q( {: B9 t5 b - HAL_NVIC_EnableIRQ( USART1_IRQn );2 `" L4 [2 {, G: C# X6 \
- ( `( x% i* ^( k6 C5 S
- /* Enable the UART Data Register not empty Interrupt */+ z. j8 k2 E; ~$ z# n
- HAL_UART_Receive_IT( &husart_debug, &RxDatabuf, 1 );
4 O( x, v$ P2 }6 x% r - }
复制代码
5 B1 i( K; y. _# d9 o, EUART.H8 M1 n+ H+ }/ `) B2 X
- /******************************************************************************
, i+ M5 _ n' _ - * Copyright 2017-2030 DaPu Co.* R/ z5 p4 b' |
- * FileName: uart_new.h + T6 B0 k$ D9 C- d! u! a) H
- * Desc:
# K) \. H, d; M5 u& { - * & H4 O" A7 j; t8 {) \% s
- *
/ U8 o1 R1 k+ l0 m0 _# C; j - * Author: CGH: \- x* w/ n/ g. ^0 p2 S
- * Date: 2017/10/12
- V6 R+ y7 ^; `" R+ V/ D - * Notes:
. ~! l, s4 u4 L - * ( E- U3 z; I* C. x1 X" i* ^- _6 l
- * -----------------------------------------------------------------
1 e8 e3 w% E3 C+ _8 o - * Histroy: v1.0 2017/10/12, CGH create this file
( z( X& g1 q8 b9 | - * 9 y4 p7 p' z3 A( m
- ******************************************************************************/5 Z6 O* a6 ?! T7 A+ p# b
- #ifndef UART_NEW_H+ C& V2 U' c2 o& l) h- H0 X
- #define UART_NEW_H: Z6 D% q/ t6 H
- /*------------------------------- Includes ----------------------------------*/2 o4 A# h# O1 {7 A/ P
- #include "stm32l0xx_hal.h"5 Y; |5 f! S: p1 `' o2 S) t$ m1 |
- #include <stdio.h>8 J; X* U) B- _% x- r# J1 X
* y0 Z4 N/ V+ Y9 t: X- /*----------------------------- Global Defines ------------------------------*/
6 y o* W$ z$ E, M Z( @/ ?: J8 z - #define DEBUG_USARTx USART1
& C7 Z& J* b$ c# X - #define DEBUG_USARTx_BAUDRATE 9600
1 s: w8 C# P+ a7 C+ w+ |5 w - #define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART1_FORCE_RESET();\\
' \+ V" _: d f% x9 e( D - __HAL_RCC_USART1_RELEASE_RESET();\\
2 }( X: y1 @& W# |# y# { - __HAL_RCC_USART1_CLK_ENABLE()4 C' B2 X Q' }4 l: r ]
- #define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()
" p( W4 h2 f, a3 M( k6 ], | - / u% u+ _9 K# n; G" U: w
- #define DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
# d) G2 D9 g* w3 Z( ?+ L3 c2 D - #define DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_9
: b* }8 ^5 v5 {% y0 e9 e - #define DEBUG_USARTx_Tx_GPIO GPIOA
! c2 q7 O0 o4 }% m - #define DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_109 l" T& [! P8 a
- #define DEBUG_USARTx_Rx_GPIO GPIOA8 e- w8 g( O2 V+ u. R7 E
- ! J1 r$ l2 z. X. p
- #define DEBUG_USART_IRQn USART1_IRQn- m" `2 P: ~. p* `
- ! c% u5 Z" q5 {! M
- /*----------------------------- Global Typedefs -----------------------------*/
' H! i8 U" Q( f - /*----------------------------- External Variables --------------------------*/
4 b4 a+ v- ~* b$ ]# l3 Z% w - extern UART_HandleTypeDef husart_debug;
R: C1 ?. B- T z1 Z - 4 y: {4 F5 J# [' ]- E
- /*------------------------ Global Function Prototypes -----------------------*/
# @' L- ^; c# V' y3 u4 z - extern void MX_DEBUG_USART_Init(void);* m3 N& K4 u) T! M
8 g0 J2 ^ H2 v) e& v1 Z
. I4 X8 u( u, Y# C. e- #endif# ^( |6 R/ ~' H4 T4 F4 e2 ~
复制代码 4 d7 ]) _7 U3 m
/ M- `( U1 x& T+ b8 { |