usart.c ( File view )
From:Modbus485 protocol
- By Karma_w 2015-06-09
- View(s):16
- Download(s):1
- Point(s): 1
#include "sys.h" #include "usart.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //Mini STM32开发板 //串口1初始化 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2010/5/27 //版本:V1.3 //版权所有,盗版必究。 //Copyright(C) 正点原子 2009-2019 //All rights reserved //******************************************************************************** //V1.3修改说明 //支持适应不同频率下的串口波特率设置. //加入了对printf的支持 //增加了串口接收命令功能. //修正了printf第一个字符丢失的bug ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1 #pragma import(__use_no_semihosting) //标准库需要的支持函数 struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; /* FILE is typedef’ d in stdio.h. */ FILE __stdout; //定义_sys_exit()以避免使用半主机模式 _sys_exit(int x) { x = x; } //重定义fputc函数 int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0);//循环发送,直到发送完毕 USART1->DR = (u8) ch; return ch; } #endif //end ////////////////////////////////////////////////////////////////// #define EN_USART1_RX #ifdef EN_USART1_RX //如果使能了接收 //串口1中断服务程序 //注意,读取USARTx->SR能避免莫名其妙的错误 u8 uart_rev_buff[Rev_Buff_Max]; //接收缓冲 extern u16 uart_rev_count; //ADU接收字节个数 extern u8 volatile uart_rev_flag; void USART1_IRQHandler(void) { u8 res; if(USART1->SR&(1<<5))//接收到数据 { // res=USART1->DR; // USART1->DR=res; // while(!(USART1->SR&(1<<6)));//等待发送完成 //if(uart_rev_flag == 1) //等待一帧数据解析完毕 { if (uart_rev_count<Rev_Buff_Max) { res=USART1->DR; uart_rev_buff[uart_rev_count]=res; uart_rev_count++; /*当接收的字节后超过3.5个字节时间没有新的字节认为本次接收完成*/ //3.5个字符时间=3.5*8*1/9600秒=2.917ms //3.5个字符时间,判断一帧数据是否结束 //Timerx_Init(6,7199); //0.5ms TIM3->CNT=0; TIM3->CR1|=0x01; } else { res=USART1->DR; //如果数据帧长度超过缓存,则丢弃字符 } } //else ; } } #endif void uart_send_char(u8 ch) { USART1->DR=ch; while(!(USART1->SR&(1<<6)));//等待发送完成 //USART1->SR &= ~(1<<6); } //初始化IO 串口1 //pclk2:PCLK2时钟频率(Mhz) //bound:波特率 //CHECK OK //091209 void uart_init(u32 pclk2,u32 bound) { float temp; u16 mantissa; u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV mantissa=temp; //得到整数部分 fraction=(temp-mantissa)*16; //得到小数部分 mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<2; //使能PORTA口时钟 RCC->APB2ENR|=1<<14; //使能串口时钟 GPIOA->CRH&=0XFFFFF00F; GPIOA->CRH|=0X000008B0;//IO状态设置 RCC->APB2RSTR|=1<<14; //复位串口1 RCC->APB2RSTR&=~(1<<14);//停止复位 //波特率设置 USART1->BRR=mantissa; // 波特率设置 USART1->CR1|=0X200C; //1位停止,无校验位. #ifdef EN_USART1_RX //如果使能了接收 //使能接收中断 USART1->CR1|=1<<8; //PE中断使能 USART1->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(1,1,USART1_IRQChannel,2);//组2,最低优先级 #endif }
...
Expand> <Close
File list
Tips: You can preview the content of files by clicking file names^_^Name | Size | Date |
---|---|---|
0 | 1.97 kB | |
0 | 1.97 kB | |
0 | 1.97 kB | |
adc.c | 2.48 kB | 2015-06-03 11:04 |
adc.h | 693.00 B | 2011-01-12 21:19 |
0 | 1.97 kB | |
dma.c | 1.31 kB | 2010-06-07 16:30 |
dma.h | 378.00 B | 2010-06-07 16:30 |
0 | 1.97 kB | |
exti.c | 1.71 kB | 2011-01-12 20:50 |
exti.h | 628.00 B | 2011-01-12 20:51 |
0 | 1.97 kB | |
key.c | 1.73 kB | 2013-04-03 14:18 |
key.h | 839.00 B | 2011-01-12 20:46 |
0 | 1.97 kB | |
FONT.H | 15.78 kB | 2010-06-21 11:18 |
ILI93xx.c | 38.75 kB | 2012-10-25 23:18 |
LCD.h | 8.94 kB | 2012-10-25 22:28 |
0 | 1.97 kB | |
led.c | 910.00 B | 2013-04-03 14:18 |
led.h | 288.00 B | 2010-05-27 17:30 |
0 | 1.97 kB | |
FONT.H | 15.78 kB | 2010-03-19 17:16 |
oled.c | 6.70 kB | 2011-01-12 21:02 |
oled.h | 1.59 kB | 2011-01-12 21:02 |
0 | 1.97 kB | |
rtc.c | 7.75 kB | 2011-01-12 22:04 |
rtc.h | 1.35 kB | 2011-01-12 21:15 |
0 | 1.97 kB | |
timer.c | 2.10 kB | 2015-06-03 11:38 |
timer.h | 724.00 B | 2011-01-12 20:59 |
0 | 1.97 kB | |
wdg.c | 2.04 kB | 2011-01-12 20:56 |
wdg.h | 756.00 B | 2011-01-12 20:56 |
0 | 1.97 kB | |
wkup.c | 1.85 kB | 2011-01-12 21:18 |
wkup.h | 728.00 B | 2011-01-12 21:18 |
keilkilll.bat | 399.00 B | 2011-04-23 10:24 |
README.TXT | 377.00 B | 2012-07-19 22:20 |
0 | 1.97 kB | |
0 | 1.97 kB | |
delay.c | 2.02 kB | 2013-04-03 12:14 |
delay.h | 905.00 B | 2013-04-03 12:14 |
0 | 1.97 kB | |
cortexm3_macro.h | 2.17 kB | 2009-05-07 14:42 |
stm32f10x_conf.h | 6.05 kB | 2009-05-07 14:42 |
stm32f10x_it.h | 4.42 kB | 2012-12-18 12:35 |
stm32f10x_map.h | 27.63 kB | 2009-05-07 14:42 |
stm32f10x_nvic.h | 18.75 kB | 2009-05-07 14:42 |
stm32f10x_type.h | 3.31 kB | 2009-05-07 14:42 |
sys.c | 6.69 kB | 2013-04-03 12:13 |
sys.h | 3.78 kB | 2013-04-03 12:13 |
0 | 1.97 kB | |
usart.c | 3.35 kB | 2015-06-03 11:28 |
usart.h | 1,010.00 B | 2015-06-03 10:57 |
0 | 1.97 kB | |
adc.crf | 34.24 kB | 2015-06-03 11:04 |
adc.d | 298.00 B | 2015-06-03 11:04 |
adc.o | 39.02 kB | 2015-06-03 11:04 |
delay.crf | 31.84 kB | 2015-06-03 10:54 |
delay.d | 286.00 B | 2015-06-03 10:54 |
delay.o | 37.45 kB | 2015-06-03 10:54 |
ili93xx.crf | 80.82 kB | 2015-06-03 10:57 |
ili93xx.d | 592.00 B | 2015-06-03 10:57 |
ili93xx.o | 79.87 kB | 2015-06-03 10:57 |
JLinkLog.txt | 59.16 kB | 2015-06-03 11:43 |
JLinkSettings.ini | 578.00 B | 2013-04-03 14:19 |
key.crf | 34.17 kB | 2015-06-03 10:54 |
key.d | 332.00 B | 2015-06-03 10:54 |
key.o | 40.01 kB | 2015-06-03 10:54 |
led.crf | 33.41 kB | 2015-06-03 10:54 |
led.d | 298.00 B | 2015-06-03 10:54 |
led.o | 38.35 kB | 2015-06-03 10:54 |
modbus.c | 5.44 kB | 2015-06-03 11:38 |
modbus.crf | 40.08 kB | 2015-06-03 11:38 |
modbus.d | 478.00 B | 2015-06-03 11:38 |
modbus.h | 404.00 B | 2015-06-03 10:54 |
modbus.o | 47.92 kB | 2015-06-03 11:38 |
rtc.crf | 41.95 kB | 2015-06-03 10:57 |
rtc.d | 434.00 B | 2015-06-03 10:57 |
rtc.o | 48.63 kB | 2015-06-03 10:57 |
STM32F10x.d | 28.00 B | 2015-06-03 10:54 |
STM32F10x.lst | 34.54 kB | 2015-06-03 10:54 |
stm32f10x.o | 5.58 kB | 2015-06-03 10:54 |
STM32F10x.s | 11.04 kB | 2009-12-22 19:16 |
sys.crf | 35.34 kB | 2015-06-03 10:54 |
sys.d | 264.00 B | 2015-06-03 10:54 |
sys.o | 42.51 kB | 2015-06-03 10:54 |
TEST.axf | 37.47 kB | 2015-06-03 11:43 |
TEST.build_log.htm | 1.36 kB | 2015-06-03 11:44 |
test.c | 601.00 B | 2015-06-03 11:41 |
test.crf | 51.11 kB | 2015-06-03 11:41 |
test.d | 792.00 B | 2015-06-03 11:41 |
TEST.hex | 13.17 kB | 2015-06-03 11:43 |
TEST.htm | 43.73 kB | 2015-06-03 11:43 |
TEST.lnp | 339.00 B | 2015-06-03 11:43 |
TEST.map | 64.78 kB | 2015-06-03 11:43 |
test.o | 54.43 kB | 2015-06-03 11:41 |
TEST.Opt | 2.03 kB | 2013-04-03 14:21 |
TEST.plg | 249.00 B | 2014-03-16 19:17 |
TEST.sct | 479.00 B | 2014-02-21 11:13 |
TEST.tra | 1.38 kB | 2014-02-21 11:13 |
TEST.Uv2 | 3.21 kB | 2013-04-03 14:21 |
TEST.uvgui.Administrator | 69.44 kB | 2013-04-03 14:20 |
TEST.uvgui.wjc | 72.16 kB | 2015-06-03 11:44 |
TEST.uvgui.WuJiChao | 67.42 kB | 2014-03-16 19:17 |
TEST.uvgui_wjc.bak | 72.08 kB | 2015-06-03 11:42 |
TEST.uvgui_WuJiChao.bak | 67.35 kB | 2014-02-21 11:21 |
TEST.uvopt | 10.12 kB | 2015-06-03 11:44 |
TEST.uvproj | 16.86 kB | 2015-06-03 11:42 |
TEST_Target | 8.60 kB | 2015-06-03 11:43 |
TEST_uvopt.bak | 10.12 kB | 2015-06-03 11:42 |
TEST_uvproj.bak | 17.39 kB | 2015-06-02 14:35 |
timer.crf | 38.84 kB | 2015-06-03 11:38 |
timer.d | 462.00 B | 2015-06-03 11:38 |
timer.o | 43.37 kB | 2015-06-03 11:38 |
usart.crf | 38.59 kB | 2015-06-03 11:28 |
usart.d | 388.00 B | 2015-06-03 11:28 |
usart.o | 43.36 kB | 2015-06-03 11:28 |
wdg.crf | 34.45 kB | 2015-06-03 10:54 |
wdg.d | 330.00 B | 2015-06-03 10:54 |
wdg.o | 41.05 kB | 2015-06-03 10:54 |
wkup.crf | 34.14 kB | 2015-06-03 10:54 |
wkup.d | 378.00 B | 2015-06-03 10:54 |
wkup.o | 41.15 kB | 2015-06-03 10:54 |