"); //-->
| 串口能给我们编程调试带来很大帮助,STM32的串口使用起来也很简单,参考官方代码,然后对照STM32手册,就能找到相关寄存器设置,以及设置的先后顺序. 以下是我写的对串口操作的c文件,串口1测试无问题,串口2,3还未测试,各位可以根据自己的需要对void uart_init(u32 pclk2,u32 bound)里面的相应寄存器做修改.如果有问题请通知我. #include "sys.h" #include "usart.h" //正点原子@HYW //2009/12/08 //V1.3 //支持适应不同频率下的串口波特率设置. #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif //重定义C语言库函数printf到串口1 //CHECK OK //091209 PUTCHAR_PROTOTYPE { USART1->DR=ch;//写一个字符到串口1 while(1)//循环发送,直到发送完毕 { if(USART1->SR&0X40)break;//如果发送完了,跳出 }; return ch; } //中断优先级管理/开启 //CHECK OK //091209 void NVIC_Configuration(void) { MY_NVIC_PriorityGroupConfig(0);//设置分组0 全部4位都是响应优先级 MY_NVIC_Init(0,1,USART1_IRQChannel,0);//响应优先级1,抢占优先级0(未配置) } //串口1中断服务程序 //注意,读取USARTx->SR能避免莫名其妙的错误 u8 rebuffer[14];//接收缓冲 u8 recount="0"; //接收完全 void USART1_IRQHandler(void) { u8 res; if(USART1->SR&(1<<5))//接收到数据 { res=USART1->DR; if(recount<14&&res>47&&res<58)//仅仅接收数据 (0~9) { rebuffer[recount]=res-'0';//得到ASCII recount++; } } } //初始化IO 串口1 //pclk2:CLK2时钟频率(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=0X444444B4;//IO状态设置 RCC->APB2RSTR|=1<<14; //复位串口1 RCC->APB2RSTR&=~(1<<14);//停止复位 //波特率设置 USART1->BRR=mantissa; // 波特率设置 USART1->CR1|=0X200C; //1位停止,无校验位. //使能接收中断 USART1->CR1|=1<<8; //PE中断使能 USART1->CR1|=1<<5; //接收缓冲区非空中断使能 NVIC_Configuration(); //中断管理,不开启 } |
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
有关在Tornado2.0.2上安装WindML3.0的问题?
将RT-Thread移植到MCUXPressoIDE上(基于FRDM-MCX C444)
MPLAB® X IDE 入门(下)
温度/脉宽转换电路(555)
MPLAB® X IDE 入门(上)
研华NVIDIA Jetson OrinNano系统支持Super Mode,提升生成式AI性能1.7倍
单片机工程师面试常见问题
三星3纳米开始量产Exynos 2500
samsung s3c 2410 LCD转TV out输出方案
电路系统计算机辅助设计课件
μC OS-Ⅱ中文手册(PDF)
射频、微波和毫米波开关及开关矩阵
MPLAB® X IDE 编辑功能
基于MCP1640 DC/DC 同步升压转换器的评估板
陈渝大侠翻译的 uClinux2.6入门
比亚迪海外销量强势增长,多国月销量超特斯拉
Imagination通过最新的D系列GPU IP将效率提升至新高度
数字/时间变换器电路(555)
计划上半年流片,英特尔18A制程准备就绪
由DAC08EQ构成的锯齿波信号发生器
--
研华工业主板AIMB-289精准提升内窥镜性能,助力智慧医疗升级!
找tornado
高信噪比和失真的双16位/24位高精度Δ-Σ模数转换器
请教CS8900的网络隔离变压器型号?
输出为线性锯齿波的电压/频率转换器电路(555)
AIR-520 LLM服务器:Nvidia四卡加持,助力DeepSeek私有化部署!
wr_net_stack_programmers_guide_2.0
XG404C构成的幅度稳定失真率低的功率信号发生器
阿南《AT91SAM7S64调试笔记》