首页 > 代码库 > STM32 串行通信 USART 程序例举
STM32 串行通信 USART 程序例举
STM32 串行通信 USART 的笔记讲解连接http://blog.csdn.net/dragon12345666/article/details/24484185
1、串行通信 软件仿真STM32通过串口USART1发送26个英文字母
/************************************************************************************************** * 硬件平台:STM32F103VC * 学习重点:GPIOx的位绑定 * 实现功能:软件仿真,实现STM32通过USART1发送数据 * 配置寄存器实现(其中打开系统时钟和GPIO引脚的配置是通过库函数实现的,后面会具体讲解) **************************************************************************************************/ /*============================================================================= * 位绑定公式: * 1、SRAM区域 :0X2200 0000 ----0X200F FFFF * Aliasaddr = 0X22000000 + ( A -0X20000000 )*32 + n*4 * 2、片上外设区域 :0X4200 0000 ----0X400F FFFF * Aliasaddr = 0X42000000 + ( A -0X40000000 )*32 + n*4 * 参数解释: * Aliasaddr : 设置“端口GPIOx的第n位”的寄存器_相应位的实际地址 * A : 端口GPIOx的基地址(GPIOx_BASE) + 相应寄存器的偏移地址 * n : 配置的是相应寄存器的第n位 * 寄存器的偏移地址 :CRL CRH IDR ODR BSRR BRR LCKR * 00H 04H 08H 0CH 10H 14H 18H =============================================================================*/ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x_lib.h" //包含了所有的头文件 它是唯一一个用户需要包括在自己应用中的文件,起到应用和库之间界面的作用。 #include "stm32f10x_map.h" /******************************快速位绑定**********************************************************/ /*----------------1、宏定义要操作的寄存器地址---------------------------------------------*/ #define GPIOA_ODR (GPIOA_BASE + 0X0C) #define GPIOA_IDR (GPIOA_BASE + 0X08) #define GPIOB_ODR (GPIOB_BASE + 0X0C) #define GPIOB_IDR (GPIOB_BASE + 0X08) #define GPIOC_ODR (GPIOC_BASE + 0X0C) #define GPIOC_IDR (GPIOC_BASE + 0X08) #define GPIOD_ODR (GPIOD_BASE + 0X0C) #define GPIOD_IDR (GPIOD_BASE + 0X08) #define GPIOE_ODR (GPIOE_BASE + 0X0C) #define GPIOE_IDR (GPIOE_BASE + 0X08) /*----------------2、获取端口GPIOx(A-E)的对应寄存器的某一操作位的位地址-------------------*/ // #define BitBand(Addr , BitNum) *( (volatile unsigned long *)(Addr & 0xf0000000) + 0x2000000 + ((Addr&0xfffff)*32) + (BitNum*4) ) // 因为 左移、右移 语句的执行速度比乘除法语句的运动速度快,所以将上述语句改成如下方式 #define BitBand(Addr , BitNum) *( (volatile unsigned long *)( (Addr & 0xf0000000) + 0x2000000 + ((Addr&0xfffff)<<5) + (BitNum<<2) ) ) /*----------------3、宏定义函数,对固定的位绑定 进行功能封装------------------------------*/ #define PAout(n) BitBand(GPIOA_ODR , n) #define PAin(n) BitBand(GPIOA_IDR , n) #define PBout(n) BitBand(GPIOB_ODR , n) #define PBin(n) BitBand(GPIOB_IDR , n) #define PCout(n) BitBand(GPIOC_ODR , n) #define PCin(n) BitBand(GPIOC_IDR , n) #define PDout(n) BitBand(GPIOD_ODR , n) #define PDin(n) BitBand(GPIOD_IDR , n) #define PEout(n) BitBand(GPIOE_ODR , n) #define PEin(n) BitBand(GPIOE_IDR , n) /*----------------函数声明部分---------------*/ void delay1ms(int t) ; void RCC_Configuration(void) ; void GPIO_Configuration(void) ; /* Private functions -----------------------------------------------------------------------------*/ /************************************************************************************************** * Function Name : main * Description : 从GPIOA.8-.16输入一个电平信号,GPIOA.0-.7口分别将对应引脚输入的电平信号输出 * Input : None * Output : None * Return : None ****************************************************************************************************/ int main(void) { float Div; //计算波特率时公式里面的除数 u16 M,F; //临时存储Div的整数部分的数字和小数部分的数字 u32 Bound,BRR; //Bound:要设置的波特率 , BRR:是Div的整数部分和小数部分整合后存入寄存器USART1->BRR中的值 u8 data=http://www.mamicode.com/‘A‘; //存放要发送的数据>程序运行前的仿真界面:
程序运行后的仿真界面:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。