stm32串口實(shí)驗(yàn):stm32通過(guò)usart1進(jìn)行串口收發(fā)PA9(TX)和PA10(RX)_第1頁(yè)
stm32串口實(shí)驗(yàn):stm32通過(guò)usart1進(jìn)行串口收發(fā)PA9(TX)和PA10(RX)_第2頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 stm32串實(shí)驗(yàn): stm32通過(guò) usart1進(jìn)串收發(fā), PA9(TX)和 PA10(RX)這是stm32開發(fā)中較簡(jiǎn)單的實(shí)驗(yàn),原理是通過(guò)串助發(fā)送信息,stm32接收到信息以后在串助中打印相同的內(nèi)容。這直接分享keil5程代碼,是在程模板的基礎(chǔ)上移植和修改了正點(diǎn)原的串代碼(如果失效的話可以在下評(píng)論留下郵箱,我看到會(huì)給你發(fā)份)順便把usart.c和usart.h還有mian.c中的代碼復(fù)制到下,伙伴可以直接移植到的程中實(shí)現(xiàn)的效果也在下放上串助中顯的圖usart.c1 #include sys.h2 #include usart.h345 /STM32F103核板例程6 /庫(kù)函數(shù)版本例程7 /*

2、 出品 */8910 /11 /如果使ucos,則包括下的頭件即可.12 #if SYSTEM_SUPPORT_UCOS13 #include includes.h14 #endif/ucos 使15 /16 /STM32開發(fā)板17 /串1初始化1819 /202122 /23 /加以下代碼,持printf函數(shù),不需要選擇use MicroLIB24 #if 125 #pragma import(_use_no_semihosting)26 /標(biāo)準(zhǔn)庫(kù)需要的持函數(shù)27 struct _FILE28 29 int handle;3031 ;3233 FILE _stdout;34 /定義_sys_

3、exit()以避免使半主機(jī)模式35 void _sys_exit(int x)36 37 x = x;38 39 /重定義fputc函數(shù)40 int fputc(int ch, FILE *f)41 42 while(USART1-SR&0X40)=0);/循環(huán)發(fā)送,直到發(fā)送完畢43 USART1-DR = (u8) ch;44 return ch;45 46 #endif4748 /*使microLib的法*/49 /*50 int fputc(int ch, FILE *f)51 52 USART_SendData(USART1, (uint8_t) ch);5354 while (USA

4、RT_GetFlagStatus(USART1, USART_FLAG_TC) = RESET) 5556 return ch;57 58 int GetKey (void) 5960 while (!(USART1-SR & USART_FLAG_RXNE);6162 return (int)(USART1-DR & 0 x1FF);63 64 */6566 #if EN_USART1_RX /如果使能了接收67 /串1中斷服務(wù)程序68 /注意,讀取USARTx-SR能避免莫名其妙的錯(cuò)誤69 u8 USART_RX_BUFUSART_REC_LEN; /接收緩沖,最USART_REC_LEN

5、 個(gè)字節(jié).70 /接收狀態(tài)71 /bit15, 接收完成標(biāo)志72 /bit14, 接收到0 x0d73 /bit130, 接收到的有效字節(jié)數(shù)74 u16 USART_RX_STA=0;75/接收狀態(tài)標(biāo)記 76 void uart_init(u32 bound)77 /GPIO端設(shè)置78 GPIO_InitTypeDef GPIO_InitStructure;79 USART_InitTypeDef USART_InitStructure;80 NVIC_InitTypeDef NVIC_InitStructure;8182 RCC_APB2PeriphClockCmd(RCC_APB2Peri

6、ph_USART1|RCC_APB2Periph_GPIOA, ENABLE);/使能USART1,GPIOA時(shí)鐘83/USART1_TX PA.984 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;/PA.985 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;86 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /復(fù)推挽輸出87 GPIO_Init(GPIOA, &GPIO_InitStructure);8889 /USART1_RXPA.1090 GPIO

7、_InitStructure.GPIO_Pin = GPIO_Pin_10;91 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空輸92 GPIO_Init(GPIOA, &GPIO_InitStructure);9394 /Usart1 NVIC 配置9596 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;97 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 3 ;/搶占優(yōu)先級(jí)398 NVIC_InitStructur

8、e.NVIC_IRQChannelSubPriority = 3;99 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/優(yōu)先級(jí)3/IRQ通道使能100 NVIC_Init(&NVIC_InitStructure); /根據(jù)指定的參數(shù)初始化VIC寄存器101102 /USART 初始化設(shè)置103104 USART_InitStructure.USART_BaudRate = bound;/般設(shè)置為9600;105 USART_InitStructure.USART_WordLength = USART_WordLength_8b; /字長(zhǎng)為8位數(shù)據(jù)

9、格式106 USART_InitStructure.USART_StopBits = USART_StopBits_1;/個(gè)停位107 USART_InitStructure.USART_Parity = USART_Parity_No;/奇偶校驗(yàn)位108 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /硬件數(shù)據(jù)流控制109 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /收發(fā)模式110111 USA

10、RT_Init(USART1, &USART_InitStructure); /初始化串112 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);/開啟中斷113 USART_Cmd(USART1, ENABLE);/使能串114115 116117118119 void USART1_IRQHandler( void)/串1中斷服務(wù)程序120121 u8 Res;122 #ifdef OS_TICKS_PER_SEC123 OSIntEnter();124 #endif/如果時(shí)鐘節(jié)拍數(shù)定義了,說(shuō)明要使ucosII了.125 if(USART_GetI

11、TStatus(USART1, USART_IT_RXNE) != RESET) /接收中斷(接收到的數(shù)據(jù)必須是0 x0d 0 x0a結(jié)尾)126127128129130131132133134135136137138139140141142143144145146147Res =USART_ReceiveData(USART1);/(USART1-DR); /讀取接收到的數(shù)據(jù)if(USART_RX_STA&0 x8000)=0)/接收未完成if(USART_RX_STA&0 x4000)/接收到了0 x0dif(Res!=0 x0a)USART_RX_STA=0;/接收錯(cuò)誤,重新開始else

12、 USART_RX_STA|=0 x8000; /接收完成了else /還沒(méi)收到0X0Dif(Res=0 x0d)USART_RX_STA|=0 x4000;elseUSART_RX_BUFUSART_RX_STA&0X3FFF=Res ;USART_RX_STA+;if(USART_RX_STA(USART_REC_LEN- 1)USART_RX_STA=0;/接收數(shù)據(jù)錯(cuò)誤,重新開始接收148 #ifdef OS_TICKS_PER_SEC149 OSIntExit();150 #endif/如果時(shí)鐘節(jié)拍數(shù)定義了,說(shuō)明要使ucosII了.151 152 #endifusart.h1 #ifn

13、def _USART_H2 #define _USART_H3 #include stdio.h4 #include sys.h56 /STM32F103核板例程7 /庫(kù)函數(shù)版本例程 8 /* 出品 */910 /11 /STM32開發(fā)板12 /串1初始化1314 #define USART_REC_LEN15 #define EN_USART1_RX16200 /定義最接收字節(jié)數(shù) 200/使能(1)/禁(0)串1接收117 extern u8 USART_RX_BUFUSART_REC_LEN; /接收緩沖,最USART_REC_LEN 個(gè)字節(jié).末字節(jié)為換符18 extern u16 USA

14、RT_RX_STA; /接收狀態(tài)標(biāo)記19 /如果想串中斷接收,請(qǐng)不要注釋以下宏定義20 void uart_init(u32 bound);21 #endifmain.c1 #include sys.h2 #include delay.h3 #include usart.h45 uint8_t t;6 uint8_t len;7 uint16_t times=0;89 int main(void)10 11 delay_init(); /延時(shí)函數(shù)初始化12 uart_init(115200); /串初始化為1152001314 while(1)1516171819202122232425262728293031323334 if(USART_RX_STA&0 x8000) /USART_RX_STA第六位為1則括號(hào)內(nèi)為1,表接收完數(shù)據(jù)len=USART_RX_STA&0 x3fff;/得到此次接收到的數(shù)據(jù)長(zhǎng)度printf(rn您發(fā)送的消息為:rnrn);for(t=0;tlen;t

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論