这两天在玩STM32L0,但是串口怎么调试都有问题。数据位选择8B,显示如下:3 C3 i- K1 b( Z! p, c
' ]. G, d) V$ y$ `
% X' X9 C2 B/ g( }( j& ~7 E L7 b3 |5 R7 e. m) K
数据位选择7B时:: \: p" p: k3 i. S1 b! j( l
* Q$ b1 ?! f# b
3 A% Z- }: H! Y
. s* ^# |- w+ f, {0 S* I" S* v而我的输出应该是:printf("123456\n");printf("testing\n");
) n2 e$ A& ]3 Q! Z/ l- c& R下面时我的程序: o. ~7 L4 }8 I3 H1 ~" H) F T% @
' p: O# X6 A. P5 Z p
- //时钟初始化
" N z2 d. V' D& v# V$ m - void SystemClockConfig( void )& R$ ]/ G7 d& {: e
- {9 U# }: K8 Q2 s
- RCC_OscInitTypeDef RCC_OscInitStruct;8 e: c4 D; j' A" U7 k
- RCC_ClkInitTypeDef RCC_ClkInitStruct;" o+ u# S* N d4 W8 r$ ~7 t+ G
- RCC_PeriphCLKInitTypeDef PeriphClkInit;/ `& B. ^ Q" u, k' h& E' ~& w
- 4 B+ W1 [* L8 o7 F$ w( G7 Y4 Y
-
- |2 d" |4 E u& B6 |: j+ m - __HAL_RCC_SYSCFG_CLK_ENABLE( );
7 g$ _# f% [ k! M" J - __HAL_RCC_PWR_CLK_ENABLE( );
# ~+ E5 ~0 I5 f4 O# a - ) I6 X" \: `% B. _: r" b3 z2 A
- __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 );
, `% [ f; j8 W* p7 i; @, T$ o - // __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
y' k" w( q9 t& ]. {& @8 p5 Z( { - ' S+ ^; W- k' z6 M* c
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE;//内部高速时钟8M 和 外部低速32.768K
& L1 v4 Q) U9 |( W& ?' p - RCC_OscInitStruct.HSIState = RCC_HSI_ON;& @6 Q4 c8 g. N, E; D- ]1 H
- RCC_OscInitStruct.LSEState = RCC_LSE_ON; ( e7 b" l' w$ w# f; q' a2 U
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;4 U9 r8 E8 V, |8 C
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
# f! d; g/ f, D. o6 H! E - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
0 V2 v2 y: Y; D6 Y - RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
1 d4 n) y+ ]8 V - if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK )$ M+ J/ A5 X p6 d b
- {9 m( Y8 ?- R) d+ V4 q/ K+ O
- assert_param( FAIL );' d) i( z' x6 O4 z
- }
, R2 e- L f/ { - - x, \2 y+ q9 j8 I
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK0 B/ D( [" x- S7 K; N8 f# A
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
& c4 T, Y: r# ]1 ^2 t5 b/ M8 a2 B - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
7 Y ~5 ]$ T3 ?; e' V4 f - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;8 u/ u# X( W$ ^/ `6 G
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
8 J$ B' }* k' w - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;: h+ _8 W/ y X/ P, Q( L7 H/ Q
- if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK )
; e1 N& `7 l: X' i1 z4 h - {8 Q1 K o! z( A- f
- assert_param( FAIL );9 F N$ U3 d2 _- X; ~
- }/ z$ ^5 T! l, i& C: w* O
# A. x& `3 G0 D7 w- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC;
& i* g5 @4 }; j% B% Q) T" u - PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
% }# Q0 s& B) L1 K - PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;
4 h3 L: V5 g- T. S8 {; L+ \" R7 C2 l - PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
2 [5 X8 n* k$ \) \1 N$ O7 m! Y - if( HAL_RCCEx_PeriphCLKConfig( &PeriphClkInit ) != HAL_OK )1 }4 Y- q5 ~9 g _
- {) ^$ h. @$ e1 g) E! W+ b! _: {
- assert_param( FAIL ); Q& K4 r4 @6 R
- }
( x2 q$ l5 `& c! E - . G' F4 I5 v5 l( f
- HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );. G; F! t- e- U T' }; ^
- + R5 }' R! Q- t" L
- HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );- Q7 s* Q C0 V1 x I8 y/ Y- I
$ W$ n: c6 A; E5 ^: S R- // SysTick_IRQn interrupt configuration i& O$ _' @; L* T+ Y
- HAL_NVIC_SetPriority( SysTick_IRQn, 0, 0 );7 U% [8 f/ B+ U$ e( d
- }
复制代码 % g- i* f% m6 f" a. H* k
UART.C- F4 O7 i7 W5 i/ G
- /******************************************************************************
( H$ G! w4 H$ R) l - * Copyright 2017-2030 DaPu Co.
4 R8 @7 {" r1 [& }6 \) Z( O1 p - * FileName: uart_new.c
3 e5 [% O; L4 N9 h3 ~* E - * Desc:9 l+ \5 B2 I8 A# w- a7 C
- *
% k( M3 e& M0 _2 b - *
7 F6 X6 P6 ?3 ^ - * Author: CGH
# P0 \ `$ l) N+ I - * Date: 2017/10/12
9 [) t4 U3 v; S - * Notes:
2 H0 p; x% k# I; ]# |4 p - * ; M7 @7 R9 k# w+ {
- * -----------------------------------------------------------------4 y& N5 s+ c% g" K; w
- * Histroy: v1.0 2017/10/12, CGH create this file; t8 T- S: T" Q
- *
- }. y- Z2 u9 |5 v( b0 R - ******************************************************************************/7 v8 o8 P( ] g
- /*------------------------------- Includes ----------------------------------*/
* e/ u; ^0 @: R - #include "board.h"8 ~& v0 H3 d3 L, ^2 T2 r
- #include "uart_new.h"* d/ G9 U: o0 N% U7 i! A; h
- #include "gpio.h"
3 I, [: v8 ~& `) b" L3 k7 q; ~ - #include "delay.h"
5 I! |# Y5 z* b6 {+ f - /*------------------- Global Definitions and Declarations -------------------*/, e3 d. u9 G; W; m
- /*------------------------ Constant / Macro Definitions ---------------------*/7 T0 f8 i/ B% j) i9 A/ N" V
- /*------------------------- Type Declarations -------------------------------*/* q/ o: _. W6 [0 M @5 p
- /*------------------------- Function Prototype ------------------------------*/
7 ^0 c( A {( G6 Q, b- ?. @ - /*------------------------- Variable Declarations ---------------------------*/
- q4 Z' G$ t4 j6 g6 C8 }4 |) H - UART_HandleTypeDef husart_debug;
0 R1 @- `! G+ `9 Z# I - uint8_t RxDatabuf;
2 _/ m3 @, s5 ~+ b- O- x1 m - /*------------------------- Function Implement ------------------------------*/
: }' u0 M6 k' M5 A" J - /**
* e) O& e3 |; `: x9 p# P - * 函数功能: 串口硬件初始化配置" Y& R7 r$ `$ H( U2 D, M+ u
- * 输入参数: huart:串口句柄类型指针
' k8 C9 X U6 ?# M9 v - * 返 回 值: 无" B2 U% h) r7 ?* T; X
- * 说 明: 该函数被HAL库内部调用$ n( A s: }* D' _3 ^
- */7 `& f: C' [6 B& C9 Q7 Q
- void HAL_UART_MspInit(UART_HandleTypeDef* huart)+ g7 u5 F7 j2 C& j* m* D0 Y
- {
4 |( _- R$ ?2 P5 g' l+ Z1 Y- g. y
$ N3 D3 T+ [+ S0 }- w, l2 _- GPIO_InitTypeDef GPIO_InitStruct;
, m0 c; Q( h) L) H& u2 e$ @$ d. T - Gpio_t TX,RX;
# D3 C; S2 A: [+ N( \) e0 k8 z
8 v6 N; T' K7 X/ L7 J/ o- if(huart->Instance==DEBUG_USARTx)
! S' r8 o. s; d* E! n5 } - {6 d+ w4 m+ `6 g+ @4 u* i, V% E7 G
- /* 串口外设时钟使能 */% _/ H, J. m3 w! h
- DEBUG_USART_RCC_CLK_ENABLE();
6 x( u- e! [3 p" L/ R' K
$ I" N; h9 w$ R l- DEBUG_USARTx_GPIO_ClK_ENABLE();4 D( i J& V$ _; A* \' \9 e
- - ^+ O8 T2 [! ~9 h. Q; X
- /* 串口外设功能GPIO配置 */, T8 r1 ^5 {6 ]5 L& P6 x. Q2 d
- //GpioInit( &TX, UART_TX, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 );
6 v+ @6 U8 @% E! P/ w - //GpioInit( &RX, UART_RX, PIN_INPUT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 ); " H" n, O2 [* u3 _* z$ q
- ) {- A, c& n0 {7 z1 K% h) ^% O" H2 D
- GPIO_InitStruct.Pin = DEBUG_USARTx_Tx_GPIO_PIN;
* p1 ]) P% M' l: e - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
9 V5 `! Q3 ~% \9 x( F9 v+ l& r - GPIO_InitStruct.Pull = GPIO_AF4_USART1;+ B1 P/ P1 O9 J) U
- GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
. f7 P* Q. F5 x9 x3 ^2 [ - GPIO_InitStruct.Alternate = GPIO_AF4_USART1;* n8 E/ S3 y% x7 Z
- HAL_GPIO_Init(DEBUG_USARTx_Tx_GPIO, &GPIO_InitStruct);9 [. d+ Z3 v% Y) E- O$ h7 |5 b# d7 P
% B3 b0 m( M! X4 U- GPIO_InitStruct.Pin = DEBUG_USARTx_Rx_GPIO_PIN;
$ m Q# k: I$ [$ o6 y - GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
0 c& k% a. [1 j8 l7 u/ c! N - //GPIO_InitStruct.Pull = GPIO_NOPULL;- t: D0 }& k# g4 z& t, a' q# X. v
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;+ Y% E: p% \% d$ u
- HAL_GPIO_Init(DEBUG_USARTx_Rx_GPIO, &GPIO_InitStruct);, {; C0 j6 c- d. l' b8 G( G
- 9 J8 O% h( s- C+ C
- GpioWrite(&Led2,1);
2 b* |9 l8 c; \# u' I& S2 g - Delay(3);
! G$ c$ U: i7 M - }
. C& S6 [% ]0 E+ [$ `' ?4 i# j - }$ U. m5 N$ n. N. k8 k, [; ^! n
q, ]: t) k# O; K& F$ C- /**
U. q$ E2 r6 E- c - * 函数功能: 串口硬件反初始化配置
4 D) ^) p8 j" H* u" { - * 输入参数: huart:串口句柄类型指针
5 |& h! C$ |& s' I Y1 R5 t$ e - * 返 回 值: 无
- H) {4 ^/ O5 Y - * 说 明: 该函数被HAL库内部调用
- U6 G- Z0 D! Q$ L+ r( i! R; M. b - */
+ f; R! n7 U3 `) y% w. F - void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
1 G/ b+ p S) D8 y ]" e, j# k - {; `& f( F2 r3 q* S
- if(huart->Instance==DEBUG_USARTx)$ a! U# `8 ^+ f) v1 s
- {
2 T$ A( F0 u8 x% _; | - /* 串口外设时钟禁用 */
1 A. k g5 N$ C - DEBUG_USART_RCC_CLK_DISABLE();
]+ m& d0 r- I7 ]8 ^5 O. S - 8 R4 o7 x- I, c7 {
- /* 串口外设功能GPIO配置 */
- e7 h. _+ m2 Y8 M. L2 D) x% n. l - HAL_GPIO_DeInit(DEBUG_USARTx_Tx_GPIO, DEBUG_USARTx_Tx_GPIO_PIN); m0 m7 _' W/ I. `* m2 k& d
- HAL_GPIO_DeInit(DEBUG_USARTx_Rx_GPIO, DEBUG_USARTx_Rx_GPIO_PIN);
" [8 `7 x& L& o# t - ; c5 d y$ m9 \, s
- /* 串口中断禁用 */
p7 ^- r$ O0 ?: D# ` - HAL_NVIC_DisableIRQ(DEBUG_USART_IRQn);
) ^5 V, u( t' q. _( w. K - }
# ^& R8 C$ |- o' i6 t0 }& W - }2 O, J3 i' ?, X) H* r" y, Q
- " Z* d& t% n: u ]: n# x& i$ A
- /**
6 g7 J9 P4 _: |: \. d3 z - * 函数功能: 串口参数配置.# [: `/ e5 G4 H$ X+ h
- * 输入参数: 无
3 V: S3 h9 o: E - * 返 回 值: 无7 y3 R. m5 J$ t+ c i
- * 说 明:无6 t+ \4 ?( O# B- S4 ?! i' p7 L
- */2 A8 T8 x- Z* U/ P2 x7 E
- void MX_DEBUG_USART_Init(void)9 n4 s- m% C7 i3 y3 k0 T& l
- {( o* K6 _' d- D+ i# k/ q
- int ret = -1;1 e3 Q9 a5 k4 D( o
- - X' @. v: W4 P4 ]5 `) O* |
- __HAL_RCC_USART1_FORCE_RESET( );- Z3 h" G4 b( E9 S
- __HAL_RCC_USART1_RELEASE_RESET( );
* Y7 `$ n9 e& ^ - __HAL_RCC_USART1_CLK_ENABLE( );
7 z* K% B7 p1 R$ |% n) o2 i - /* 使能串口功能引脚GPIO时钟 */7 R5 N' w [' c5 n+ r0 j4 W
- DEBUG_USARTx_GPIO_ClK_ENABLE();
- Q/ I6 H' O- H( Y( O9 z - " X' \: O6 ?8 {# u" l
- husart_debug.Instance = DEBUG_USARTx;' d: f4 n. b) ^' A
- husart_debug.Init.BaudRate = DEBUG_USARTx_BAUDRATE;
3 x _/ {7 W6 W. s) X: w - husart_debug.Init.WordLength = UART_WORDLENGTH_8B;
6 L1 _* |* K: ?# y2 C - husart_debug.Init.StopBits = UART_STOPBITS_1;
& \; E8 M0 d/ p9 F0 } - husart_debug.Init.Parity = UART_PARITY_NONE;
7 s* Z& O5 B _ - husart_debug.Init.Mode = UART_MODE_TX_RX;
6 Z5 S* T. M& q - husart_debug.Init.HwFlowCtl = UART_HWCONTROL_NONE;' Y/ @' P0 l7 \0 S
- husart_debug.Init.OverSampling = UART_OVERSAMPLING_16;
1 Y- z9 z/ n4 P% h- ~ - ret = HAL_UART_Init(&husart_debug);
1 E. _7 k! T1 i - if(ret != HAL_OK)( u3 C3 d! h) P% F! S9 s
- {
3 A3 \ S) D; T* g E5 U - GpioWrite(&Led2,0);
% w3 g/ F- O4 l9 {* L7 K - }
# y! n+ }8 D, n% z - else1 l, d% D. N6 B* q9 f/ |
- {) O$ k+ W& Y, r/ ~
- GpioWrite(&Led3,1);
5 @" w" _% n g9 \) K - }, P* G8 F# u: H7 z: Z$ V& B5 P
- /* 串口中断起用 */
, J o7 b+ h" e+ N7 v - 3 x1 M! W: ?$ |/ P2 y% M* z+ N9 D
- HAL_NVIC_SetPriority( USART1_IRQn, 1, 0 );
G5 A/ z# u9 c# I - HAL_NVIC_EnableIRQ( USART1_IRQn );
9 f9 X/ E+ \( l' N+ N
( [( Y/ \/ i4 [- /* Enable the UART Data Register not empty Interrupt */. F- a2 j4 D" U g- }
- HAL_UART_Receive_IT( &husart_debug, &RxDatabuf, 1 );1 \) }! F! ], u. A( h
- }
复制代码
! v- p- h/ S, r2 E) z0 F& G9 C( r- {* \UART.H
9 S5 h( c+ B2 x) f- /******************************************************************************
% p, U2 h- f9 A5 Q" O) ` - * Copyright 2017-2030 DaPu Co.
7 f% c3 g5 {2 d1 z - * FileName: uart_new.h , D b5 J; M8 |
- * Desc:
y# D/ I4 V2 J1 y- r - *
# t7 ]8 B* k7 N$ I& K7 c0 p" f - * 8 |' m/ a7 Q4 _; z& J
- * Author: CGH1 a5 e. B8 } F
- * Date: 2017/10/12+ n. b! h; \3 R% \. j& |+ f! B0 e
- * Notes:
7 e6 F4 z0 r( c( |0 }9 u4 g - * 9 i8 c+ B! u$ t7 |3 R: ~1 R
- * -----------------------------------------------------------------
% h8 Q. O1 M0 \7 a" d% x% v - * Histroy: v1.0 2017/10/12, CGH create this file# p0 ]2 O1 ^+ O9 i
- *
3 {7 l3 c" Q& P8 k - ******************************************************************************/
7 w) G- f2 q) D( w& h" w% Q - #ifndef UART_NEW_H
7 Y: w2 t4 X% b9 @ - #define UART_NEW_H! d% i7 s! A' f# O0 }. g# l
- /*------------------------------- Includes ----------------------------------*/& _* S0 e& D/ @/ v& V3 @
- #include "stm32l0xx_hal.h"
9 F6 q9 E D6 G1 e+ d - #include <stdio.h>: j* a* q2 M: W% E! y4 M+ r
- 2 P" M5 _2 ]: q% g8 F% D! a4 g5 K
- /*----------------------------- Global Defines ------------------------------*/
$ @& |' B9 e7 M4 X: u# n - #define DEBUG_USARTx USART1
8 A9 f2 c# D- Y - #define DEBUG_USARTx_BAUDRATE 9600
_# S% A) ~! A. @5 B; j - #define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART1_FORCE_RESET();\\$ Q2 I* k8 N% H: v
- __HAL_RCC_USART1_RELEASE_RESET();\\
( H$ n4 e0 Q# d5 p" c! R0 V4 e - __HAL_RCC_USART1_CLK_ENABLE()
, q2 Z# w a: r' H! i1 _8 \ - #define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()
* n. S. Q3 l) N( f1 G - / |. y' I6 j) n& t! z% m8 i6 b
- #define DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()& X$ U9 n* U7 t% v
- #define DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_9
! ~) n0 m1 H5 [ - #define DEBUG_USARTx_Tx_GPIO GPIOA
% B D/ k# F/ F; d. E - #define DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_10
4 f6 ]4 a' C- ~. \" r4 f- v# }$ ]& P - #define DEBUG_USARTx_Rx_GPIO GPIOA
) l O1 G' F! f% y- p - $ F1 r) T6 V+ A2 u6 O4 t8 U6 F
- #define DEBUG_USART_IRQn USART1_IRQn
) @5 q# b7 g3 V - 7 ^" G; \" Z& A) x" K+ w! F; G
- /*----------------------------- Global Typedefs -----------------------------*/9 Q* k; Z" L! T8 u* G# i
- /*----------------------------- External Variables --------------------------*/
* q% |! {' ]: @( G0 L4 z - extern UART_HandleTypeDef husart_debug;6 p# n2 j5 G6 r" a2 g; {
9 o, X* q V5 Z" w$ }- /*------------------------ Global Function Prototypes -----------------------*/! x3 h# w! B/ t% P7 s
- extern void MX_DEBUG_USART_Init(void);8 A7 j, M+ b& n u9 @8 ?
" F$ O ~) {: x3 s1 S3 K: V% J
1 ^; B* [+ v: E0 R4 Z( @$ r$ Y- #endif
) E& L# ]* v3 Y: }4 a# y, ^
复制代码
8 R" K3 P4 X/ m2 L5 N. k- L, G+ r6 V+ _* q3 e# G4 I# T- O
|