標題:
新唐M051學習之(2)-串口
[打印本頁]
作者:
dashan
時間:
2015-3-21 17:42
標題:
新唐M051學習之(2)-串口
今天參照CMSIS庫里面的例子寫了個簡單的串口程序。
在寫串口程序之前先把硬件連接好。準備一個USB轉(zhuǎn)TTL的模塊(我用的是STC的下載器),他可以把M051發(fā)送的數(shù)據(jù)傳送到計算機上,通過串口助手程序接收數(shù)據(jù)。USB轉(zhuǎn)TTL模塊的TXD接P3.0,RXD接P3.1,GND接M051的GND(也就是共地)。安裝12M晶振和30pf電容。如下圖所示。
MDK中也要做如下設(shè)置。從M051SeriesBSP_CMSIS_v2.01.002 里找到cor_cm0.c 、 system_M051Series.c 、 retarget.c 三個文件,加入到項目中,如下圖示。
includle paths 里面也要多包含兩個路徑:
C:\Keil\M051SeriesBSP_CMSIS_v2.01.002\M051SeriesBSP_CMSIS_v2.01.002\LibM051Series\CMSIS\CM0\CoreSupport
C:\Keil\M051SeriesBSP_CMSIS_v2.01.002\M051SeriesBSP_CMSIS_v2.01.002\LibM051Series\StdDriver\inc
源文件如下:
#include
<stdio.h>
#include
<M051Series.h>
#define
PLLCON_SETTING SYSCLK_PLLCON_50MHz_XTAL
#define
PLL_CLOCK 50000000
void
SystemInit(
void
)
{}
void
SYS_Init(
void
)
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init System Clock */
/*---------------------------------------------------------------------------------------------------------*/
/* Unlock protected registers */
SYS_UnlockReg();
/* Enable External XTAL (4~24 MHz) */
SYSCLK
->
PWRCON |
=
SYSCLK_PWRCON_XTL12M_EN_Msk;
/* Waiting for 12MHz clock ready */
SYS_WaitingForClockReady( SYSCLK_CLKSTATUS_XTL12M_STB_Msk);
/* Switch HCLK clock source to XTAL */
SYSCLK
->
CLKSEL0
=
SYSCLK_CLKSEL0_HCLK_XTAL;
/* Set PLL to power down mode and PLL_STB bit in CLKSTATUS register will be cleared by hardware.*/
SYSCLK
->
PLLCON|
=
SYSCLK_PLLCON_PD_Msk;
/* Set PLL frequency */
SYSCLK
->
PLLCON
=
PLLCON_SETTING;
/* Waiting for clock ready */
SYS_WaitingForClockReady(SYSCLK_CLKSTATUS_PLL_STB_Msk);
/* Switch HCLK clock source to PLL */
SYSCLK
->
CLKSEL0
=
SYSCLK_CLKSEL0_HCLK_PLL;
/* Enable IP clock */
SYSCLK
->
APBCLK
=
SYSCLK_APBCLK_UART0_EN_Msk | SYSCLK_APBCLK_UART1_EN_Msk;
/* Select IP clock source */
SYSCLK
->
CLKSEL1
=
SYSCLK_CLKSEL1_UART_XTAL;;
/* Reset PWMB channel0~channel3 */
SYS
->
IPRSTC2
=
SYS_IPRSTC2_PWM47_RST_Msk;
SYS
->
IPRSTC2
=
0
;
/* Update System Core Clock */
/* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
//SystemCoreClockUpdate();
PllClock
=
PLL_CLOCK;
// PLL
SystemCoreClock
=
PLL_CLOCK /
1
;
// HCLK
CyclesPerUs
=
PLL_CLOCK /
1000000
;
// For SYS_SysTickDelay()
/*---------------------------------------------------------------------------------------------------------*/
/* Init I/O Multi-function */
/*---------------------------------------------------------------------------------------------------------*/
/* Set P3 multi-function pins for UART0 RXD and TXD */
SYS
->
P3_MFP
=
SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0;
/* Lock protected registers */
SYS_LockReg();
}
void
UART0_Init()
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init UART */
/*---------------------------------------------------------------------------------------------------------*/
UART0
->
BAUD
=
UART_BAUD_MODE2 | UART_BAUD_DIV_MODE2(__XTAL,
115200
);
_UART_SET_DATA_FORMAT(UART0, UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1);
}
int
main(
void
)
{
uint32_t u32Item;
SYS_Init();
UART0_Init();
printf
(
"請發(fā)送一個字符\n"
);
while
(
1
)
{
u32Item
=
getchar
();
printf
(
"你發(fā)送的是:%c\n"
,u32Item);
}
}
燒寫程序,并連接串口助手(我用的是STC的燒寫工具里的串口助手),助手的波特率必須設(shè)置115200,因為M051的程序里設(shè)置的是115200。隨便發(fā)送幾個字母測試。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1