这两天在玩STM32L0,但是串口怎么调试都有问题。数据位选择8B,显示如下:
; N5 p @0 X+ F2 {# H9 H. q ^% d
% d. P I8 ~* y3 ]$ S
- t+ |" X' s m. O9 }' z$ E& {4 Z9 s( F( h- u! N
数据位选择7B时:8 X+ @- f# j. r9 ?0 |: f; o
0 `/ i, |6 e: m5 ]* q# X
8 e( y+ ]+ B# r7 f$ h
, `0 B; g u3 U$ l) \5 h而我的输出应该是:printf("123456\n");printf("testing\n");# j1 t1 z; A V6 f; P* F$ Z* U. q
下面时我的程序:
1 T" J0 Z- p) y7 m/ Z
* \1 ~! F7 R# v" y- ?. k }- //时钟初始化* C) S1 k! k) M
- void SystemClockConfig( void )
- Q7 m! I* M4 u- X - {* f! C! p, ?$ m. g; w# Y
- RCC_OscInitTypeDef RCC_OscInitStruct;' ^# B7 u# @" o2 W8 _+ G
- RCC_ClkInitTypeDef RCC_ClkInitStruct;! q4 f) o& {0 D' K
- RCC_PeriphCLKInitTypeDef PeriphClkInit;
' y6 ]9 G+ U- }, g3 T7 ^9 J& f0 }) i -
" z+ B* I3 Z5 `+ F; G - 0 O) @% W+ X* u) r. |
- __HAL_RCC_SYSCFG_CLK_ENABLE( );9 Z) P/ R' ]5 P+ R4 V3 R+ Y
- __HAL_RCC_PWR_CLK_ENABLE( );
4 ?3 U2 B$ `6 r. s8 e& O h - 3 y( n) q/ |. X; v* p
- __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 );
, ?/ N5 {3 ]+ v9 q3 { - // __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
" m4 T& j8 Y! @# G. h! w2 F6 F -
% ^$ U6 S- y0 o3 x! c' E - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE;//内部高速时钟8M 和 外部低速32.768K% u1 x/ A. l, D; ?
- RCC_OscInitStruct.HSIState = RCC_HSI_ON;. B5 L. c; X( }) P8 H3 ]; {/ r
- RCC_OscInitStruct.LSEState = RCC_LSE_ON;
% {1 @& `& M. |8 \ w - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;* g4 I. ~; a) D
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
* W) B$ N4 w" ^, R3 b - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;' r8 Y) m+ e+ U1 K7 u: s$ p
- RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;* G7 w" S" l# F0 L% s3 W* T+ h
- if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK ) b! z' W& c' n" y W
- {- S8 |! s( B8 I
- assert_param( FAIL );
5 W* ~* {. k( \" G3 C9 `3 ~# c - }. [8 z. B2 s& b4 X v N
" |. w% D4 D) E' ~8 `) W/ z: m- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
9 V# t) X; B3 t' A) ?" j1 D - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
`2 @. e" `7 o: V2 P5 N6 V( p* {% n) ]; T - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
6 h d$ f- @1 N, p1 r - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
% t" d. ~+ I e9 Y - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
w6 Y2 L4 E- ]+ A5 `# [; e9 M1 U& c - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
3 r! A# Q3 C5 Q9 H) F& L - if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK )
v# ^% @9 e" r. L/ o" J" w2 H - {
! @1 ?( j& U7 K8 R" Q- k - assert_param( FAIL );# d. V9 g( T; i
- }
4 h `, O" J" O* }; P
- x; ?# f1 [4 [! U$ T- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC;2 R4 V& B0 M& k7 l6 N' v, P* d% I
- PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;0 @$ H: z" D; T1 E# L
- PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;, ^ i9 k8 B/ D
- PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
5 J6 h# u E0 L) w6 v7 [" z+ m - if( HAL_RCCEx_PeriphCLKConfig( &PeriphClkInit ) != HAL_OK )
9 S+ _& q4 ^. K, O6 z& P9 E5 ?9 U - {
! \, M% s* s% ^& o0 O0 J - assert_param( FAIL );
; S9 u' I: k' s" W9 t9 q8 y/ P6 a% _ - }
% ?+ q! P W, G4 N - 4 x- I! B' i5 u8 L, m
- HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );
8 J. K/ g6 \6 P" b - 4 p* p( x |+ D. w
- HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );
4 J$ E9 j! l& H: t/ q7 Q
i9 A S7 a* c. L+ g- // SysTick_IRQn interrupt configuration
% X% q% X, X/ f5 ]$ r$ ^ - HAL_NVIC_SetPriority( SysTick_IRQn, 0, 0 );- j1 @5 r$ g$ s
- }
复制代码
( B0 M8 a) V6 N+ @9 r8 C$ E: u3 p; qUART.C
" g$ f9 M6 k- v a% @% g- /******************************************************************************; L" T& n9 t+ J6 D4 f
- * Copyright 2017-2030 DaPu Co.; g: c" Z- p& |# U+ f8 X
- * FileName: uart_new.c
, Y, i+ f! J% ]& }) M - * Desc: |7 c2 R' ?4 f4 W. L% r4 N8 X% S& A
- *
+ S3 V) z" k$ F9 D- N - *
; p! @7 n/ o, n - * Author: CGH
; U. A& m6 [! g - * Date: 2017/10/12
0 v0 X4 q$ Z% P8 ? - * Notes: : J5 J8 @) g% T2 V
- *
" ^9 t6 N, \$ e, B. P - * -----------------------------------------------------------------
) q* f$ {+ T) G' ~ - * Histroy: v1.0 2017/10/12, CGH create this file" G5 v4 i1 O% Y' j, C9 U* c
- * 5 e# M: q l# |( [/ z
- ******************************************************************************/5 D+ P) \1 v# X/ v9 K2 G
- /*------------------------------- Includes ----------------------------------*/1 w4 }0 q+ W5 V0 p7 N7 {. W5 t
- #include "board.h"
. {" h# P4 c7 K3 x, e - #include "uart_new.h"# G' D' o- E; V1 y, i
- #include "gpio.h"0 d5 X6 D1 E+ g6 k
- #include "delay.h"
l' \/ i; m2 D. b. N - /*------------------- Global Definitions and Declarations -------------------*/( `/ r$ ]! g$ F& @
- /*------------------------ Constant / Macro Definitions ---------------------*/
K) g5 ?) Y8 {8 K( g' D, F - /*------------------------- Type Declarations -------------------------------*/8 l+ o) c3 K; X
- /*------------------------- Function Prototype ------------------------------*/4 |( P# q: j; {% n$ t$ j+ K# o$ {) o
- /*------------------------- Variable Declarations ---------------------------*/- u8 G$ j/ i! k! G R7 Y
- UART_HandleTypeDef husart_debug;( |9 d# b+ ^# g! [
- uint8_t RxDatabuf;3 I) R# h/ F: @, [4 N
- /*------------------------- Function Implement ------------------------------*/6 A4 @* ?' \: @$ i2 w
- /**0 |0 Y N9 h7 g
- * 函数功能: 串口硬件初始化配置
3 d" k9 V( k9 u4 R - * 输入参数: huart:串口句柄类型指针
: r9 B3 C4 A6 h& U% I/ A" I& j - * 返 回 值: 无) z& C& ?& u) m, e
- * 说 明: 该函数被HAL库内部调用2 _. J/ {4 ~+ u8 X
- */4 T7 O3 W3 R# W, |
- void HAL_UART_MspInit(UART_HandleTypeDef* huart)0 e: Q7 P* Y! t* ~8 a" `
- {
0 g4 d; C6 u( S( S1 @& [& L - # [) x' I* |1 i! Z! S0 c* h
- GPIO_InitTypeDef GPIO_InitStruct;
3 G. o3 d# ?/ \9 [9 R - Gpio_t TX,RX;
8 t7 A1 d2 [2 e: w2 Q& ^
/ w# ?# a( h- B% c7 B* G- if(huart->Instance==DEBUG_USARTx)
! P7 A- g1 g Y - {- U" x# h& V6 e$ P/ v! l
- /* 串口外设时钟使能 */
* `3 Z- h2 V- }" S - DEBUG_USART_RCC_CLK_ENABLE();/ E" D8 f9 ]1 G' {
- " }8 C ?* @7 A6 a! }9 q
- DEBUG_USARTx_GPIO_ClK_ENABLE();
3 I; L/ D( G3 j3 Q. Z! ]; `' n Q - + o# B, {: a* o; o* n0 U0 \
- /* 串口外设功能GPIO配置 */6 H- Z! Y4 R. D
- //GpioInit( &TX, UART_TX, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 );& | J4 q [" y/ h7 k
- //GpioInit( &RX, UART_RX, PIN_INPUT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 ); 4 X! V$ }* s& j# Y8 U$ M6 i4 M, m
8 Z7 K7 }" u+ f& R- GPIO_InitStruct.Pin = DEBUG_USARTx_Tx_GPIO_PIN;
4 r: } P7 C, D) w% n+ C- L - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;! e1 m' w4 s! Q9 A9 g
- GPIO_InitStruct.Pull = GPIO_AF4_USART1;* ?8 S+ X6 i+ h6 j- g7 u& F( j2 [, E6 u
- GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;+ m1 X# H1 Y& E* [7 h" [6 s9 S; D
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
/ a/ f# j1 l+ T - HAL_GPIO_Init(DEBUG_USARTx_Tx_GPIO, &GPIO_InitStruct);( a: L, P& C, P( `" G2 l% L
- % k0 q. Y$ r" Z# {
- GPIO_InitStruct.Pin = DEBUG_USARTx_Rx_GPIO_PIN;! J' E) v& r" c+ a) O+ V. x
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
: B: ~ [" ?- a& w$ r7 c; O! n* U: A - //GPIO_InitStruct.Pull = GPIO_NOPULL;; o+ [; G* [ P: D# A7 J% B% I, D4 p
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;2 Z/ T7 B6 g& \/ s3 `/ d6 o
- HAL_GPIO_Init(DEBUG_USARTx_Rx_GPIO, &GPIO_InitStruct);* x5 P: V3 H. x2 a
- ' o; H4 s+ R/ d. _( a4 l
- GpioWrite(&Led2,1);+ f6 P' s' P8 L
- Delay(3);
- G& ?+ v' w% D4 I: g9 ` - }; M8 W+ }. b4 b) t) p+ t: f. J
- }: K. W/ t/ P D. B% T. {
- 2 h' L0 A. J! Z I
- /**
$ ]: h' U6 F9 b9 I6 J5 D - * 函数功能: 串口硬件反初始化配置2 E. y& ]: b9 j" ?1 h. |8 Z3 @
- * 输入参数: huart:串口句柄类型指针$ E- U+ p; `1 v5 l- [ q/ n& H; s
- * 返 回 值: 无
$ e$ \4 K- V& u! c - * 说 明: 该函数被HAL库内部调用+ l# D D# C0 p) ]( _
- */
s/ B) V& k- V4 e+ m3 K1 t - void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
+ A5 W( ^! a. u- z4 J% ^ - {5 g9 d; S& }& k9 Q4 ~
- if(huart->Instance==DEBUG_USARTx)
; s/ z! M p. G1 R4 d) j - {& Y1 [5 o' N9 m
- /* 串口外设时钟禁用 */
6 r9 Z3 Q: c3 \- `1 E& g: n1 e - DEBUG_USART_RCC_CLK_DISABLE();
7 E9 r4 G' N( c7 a% T, i! [ - 2 J2 U4 n: g+ J# I: V
- /* 串口外设功能GPIO配置 */
; d/ Q) Y" ]! C- I7 n' a - HAL_GPIO_DeInit(DEBUG_USARTx_Tx_GPIO, DEBUG_USARTx_Tx_GPIO_PIN);
+ z/ g1 V& R: o2 A2 r2 N - HAL_GPIO_DeInit(DEBUG_USARTx_Rx_GPIO, DEBUG_USARTx_Rx_GPIO_PIN);# h' q( T, s' Q- A A
' ]9 d3 Y/ \* v/ M& S5 \, }- /* 串口中断禁用 */
3 h$ M3 M; ?$ A5 J2 ^ - HAL_NVIC_DisableIRQ(DEBUG_USART_IRQn);
/ ~) r+ E7 o5 c% [ - }5 X% y e$ i2 x; |" M
- }& B9 t) u3 H$ i' c' ^* @
- 2 p8 y1 o5 I0 q# V. V9 M
- /**
; O$ u ~ j1 ^ - * 函数功能: 串口参数配置.
5 O+ Z$ d, W2 b1 f% u0 ~, l - * 输入参数: 无5 D* @1 r+ u5 d3 l' K' B; q- w
- * 返 回 值: 无
% k. u8 `- H" N/ W6 L$ g, y; V4 ^5 P - * 说 明:无
0 k+ f* _1 z5 Y - */$ Q6 X5 @) j0 `! C. z" i- R
- void MX_DEBUG_USART_Init(void)
" A6 \- ^2 K( U- ~* u; Q) E. @7 a - {: ^+ ~! g& p3 s6 D
- int ret = -1;
- E. C$ d/ Y l - 9 }/ s7 v& ~3 a+ `, ]. r8 ~: J
- __HAL_RCC_USART1_FORCE_RESET( );
$ B% w0 u7 n% y1 X* E; U9 M - __HAL_RCC_USART1_RELEASE_RESET( );3 x+ F! y2 k: ?& a
- __HAL_RCC_USART1_CLK_ENABLE( );. T* e( B# B' u5 U% z* u" x, J
- /* 使能串口功能引脚GPIO时钟 */ k& w6 p1 `( t* [8 z/ O
- DEBUG_USARTx_GPIO_ClK_ENABLE();1 i& M( Q: i# ?- n( O6 K& j8 P
6 F* e4 Y" {/ P9 X A5 g0 A- husart_debug.Instance = DEBUG_USARTx;( t2 H, a9 ?- B# g& w7 T! W
- husart_debug.Init.BaudRate = DEBUG_USARTx_BAUDRATE;9 z5 ? W9 ^& ]) `9 U
- husart_debug.Init.WordLength = UART_WORDLENGTH_8B;& g5 G( O* @: c7 X0 j3 L
- husart_debug.Init.StopBits = UART_STOPBITS_1;& f$ m3 _$ }- B
- husart_debug.Init.Parity = UART_PARITY_NONE;
$ c( v/ q" N$ X7 }: ~$ H: N7 k - husart_debug.Init.Mode = UART_MODE_TX_RX;
2 o' Q M- h/ K# m- H0 i; A* a0 E - husart_debug.Init.HwFlowCtl = UART_HWCONTROL_NONE;
" o8 a' K! N7 t - husart_debug.Init.OverSampling = UART_OVERSAMPLING_16;
- \* s3 S6 w7 A - ret = HAL_UART_Init(&husart_debug);. } m+ L+ }; ^4 L7 M7 M% Y% t
- if(ret != HAL_OK)
3 ^: g+ ]. U# \5 X - {
9 U( o# ^" v/ C - GpioWrite(&Led2,0);
2 h$ ]4 v F9 b8 d8 R* S - }; B9 B: y0 r9 K
- else
4 ^2 _1 \, N$ G5 \# W - {( n/ H5 Z' p: y8 \
- GpioWrite(&Led3,1);
2 Y, ]# Y! g0 n* H - }# }+ j" m) V, ]8 l: z# k1 x# c
- /* 串口中断起用 */
. a. @5 P; M# R! u) ?% F Y - ' n8 j! m( l1 S! u, C! L
- HAL_NVIC_SetPriority( USART1_IRQn, 1, 0 );
: a/ L2 {3 ?! h$ i, X1 S - HAL_NVIC_EnableIRQ( USART1_IRQn );/ b9 g; T3 @( x/ D8 E: M+ j; O- m
# ]5 D3 a! R( O/ r% E- /* Enable the UART Data Register not empty Interrupt */! ^% u# P3 X9 S/ P$ q
- HAL_UART_Receive_IT( &husart_debug, &RxDatabuf, 1 );( S* @$ p2 X* K6 t* H8 L$ Y+ g6 s# q% N( c
- }
复制代码 ; q2 y8 r$ Y2 w) _) C4 f" Q9 U( ?/ o
UART.H0 d+ y1 {- S2 H% Q+ x8 I
- /******************************************************************************4 w+ `4 A5 j+ \4 |
- * Copyright 2017-2030 DaPu Co. y$ u0 }3 F: m0 h# i% K& d- e
- * FileName: uart_new.h
3 l/ U% c+ f. \4 ~8 j) i - * Desc:- W4 W S4 Q- w
- *
$ B9 T7 O' P' j - * 2 ^; `- R4 N" [" P( M& ?8 r/ w: l
- * Author: CGH
: A5 y2 L4 |( y+ J/ F( C3 J - * Date: 2017/10/12
, y( R" f1 C9 S6 ?2 r - * Notes: 0 A3 R9 u* x j
- *
d8 b/ l/ ^* C7 Z7 ]: ] - * -----------------------------------------------------------------
% R' o7 I# B; ]5 {, b6 t - * Histroy: v1.0 2017/10/12, CGH create this file
; c% c" |0 b H: s8 H4 K1 Z - * ( ] h8 y9 ]8 @+ R
- ******************************************************************************/. W! w* L. C3 i @' B
- #ifndef UART_NEW_H( ]* e9 G* X+ B+ x7 J
- #define UART_NEW_H2 \8 r& y+ N( O
- /*------------------------------- Includes ----------------------------------*/$ b+ }3 @) ~% h$ m, F
- #include "stm32l0xx_hal.h"
" L9 O( \2 d- S& l% `3 o - #include <stdio.h>
9 P# y- P% D& @
4 I- Q5 ^, N" ]( R( L- /*----------------------------- Global Defines ------------------------------*/
6 {& L5 p- a* Z; X! ~$ t7 N - #define DEBUG_USARTx USART1
- N. b% ]6 ?" W# P- j3 S1 X: {. j/ z - #define DEBUG_USARTx_BAUDRATE 9600# d! F8 E' e* ?: ?, P
- #define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART1_FORCE_RESET();\\1 {. m( [' A; k8 u/ X i
- __HAL_RCC_USART1_RELEASE_RESET();\\
5 ?( o+ |! y( R `: m - __HAL_RCC_USART1_CLK_ENABLE(); {- r) |. [7 O3 T! J- {: C
- #define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()
" J2 v3 J9 k4 e, u
# [' r! Z) x. G% z7 u6 {7 N( v# a- #define DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
. u% C1 X8 f! b- F - #define DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_9 }6 g0 I$ @& P* _5 D1 w% \
- #define DEBUG_USARTx_Tx_GPIO GPIOA0 H+ r; l6 Z0 g6 G8 `4 h* C
- #define DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_10
* N# p, u6 S m9 o) x. _7 V - #define DEBUG_USARTx_Rx_GPIO GPIOA
- t' Z2 n1 V$ @+ ~; G- w2 L
( f8 ^# f# ?# [& g- #define DEBUG_USART_IRQn USART1_IRQn' z/ @, O9 A! B7 _/ m) F
, K4 L/ g) M$ u1 f, B& E2 G1 G- /*----------------------------- Global Typedefs -----------------------------*/2 m3 N1 u' M& P" M( S7 ^
- /*----------------------------- External Variables --------------------------*/
1 j) S6 ~+ E4 n, S3 ~4 ^3 R - extern UART_HandleTypeDef husart_debug;. d# i, U& A, i- k4 w$ d7 V
- - m o( ~2 n0 G: R5 o* [
- /*------------------------ Global Function Prototypes -----------------------*/
$ S2 O# x& h/ M/ Y9 S - extern void MX_DEBUG_USART_Init(void);
0 c; M6 Q/ k9 U+ P7 ]" ?1 T$ A
' @, R& R% N' K$ G+ P- F
! @3 Z2 s& ]2 _- t) v- #endif
G/ G/ T# g' k
复制代码
v; I# T. I& b# x
2 h/ f' t8 Y: _9 _1 V! P) O' u" Z |