STM32 USART寄存器方式编程
来源:互联网 发布:树莓派安装rpm软件 编辑:程序博客网 时间:2024/06/08 14:56
#include "stm32f10x.h"#define GPIOA_ODR_A GPIOA_BASE+0X0C#define GPIOA_IDR_A GPIOA_BASE+0X08#define GPIOB_ODR_A GPIOB_BASE+0X0C#define GPIOB_IDR_A GPIOB_BASE+0X08#define GPIOC_ODR_A GPIOC_BASE+0X0C#define GPIOC_IDR_A GPIOC_BASE+0X08#define GPIOD_ODR_A GPIOD_BASE+0X0C#define GPIOD_IDR_A GPIOD_BASE+0X08#define GPIOE_ODR_A GPIOE_BASE+0X0C#define GPIOE_IDR_A GPIOE_BASE+0X08#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr &0xf0000000)+ 0X2000000 + ((Addr&0Xfffff)<<5)+(BitNum<<2)))// AliasAddr = 0x2200 0000 + ((A-0X2000 0000)*8+n)*4 (n= 0~7)// = 0x2200 0000+ (A-0X2000 0000)*32+n*4 4个字节,32个位;#define PAout(n) BitBand(GPIOA_ODR_A,n) //PAout输出表达式;#define PAin(n) BitBand(GPIOA_IDR_A,n) //PAin输出表达式;#define PBout(n) BitBand(GPIOB_ODR_A,n) #define PBin(n) BitBand(GPIOB_IDR_A , n) #define PCout(n) BitBand(GPIOC_ODR_A , n) #define PCin(n) BitBand(GPIOC_IDR_A , n) #define PDout(n) BitBand(GPIOD_ODR_A , n) #define PDin(n) BitBand(GPIOD_IDR_A , n) #define PEout(n) BitBand(GPIOE_ODR_A , n) #define PEin(n) BitBand(GPIOE_IDR_A , n)void RCC_Configuration(void);//首先设置系统时钟为8MHZvoid GPIO_Configuration(void);void delay1ms(u16 t){ u16 i,j; for(i=0;i<t;i++) for(j=1000;j>0;j++); }int main(void){float DIV;u16 M,F,BRR; u32 Bound;u8 data='A';RCC_Configuration();GPIO_Configuration();//USART1模块的设置;//1. USART_CR1置位UE使能、 2. USART_CR1的M位定义字长、 3. USART_CR2中STOP停止位的位数、//4. USART_CR1中的TE位、 5. USART_BRR寄存器选择波特率、 6. 把要发送的数据写入USART_DR寄存器中USART1->CR1|=(1<<13);USART1->CR1&=~(1<<12);//M=0; 一个起始位,8个数据位,n个停止位。USART1->CR2|=~(3<<12);//1个停止位USART1->CR1 |=(1<<3);//TE位使能;//;Bound=9600;//设定波特率值是9600DIV=(float)(72*1000*1000/(Bound*16));//USARTDIV整数M=DIV;//USARTDIV整数 F=(DIV-M)*16;//USARTDIV小数位BRR=(M<<4)| F;//把波特率计算值给BRR寄存器USART1->BRR=BRR;//把波特率计算值给BRR寄存器//发送一个字符'A'到USART1的TXD ,把要发送的数据写入USART_DR寄存器中for(F=0;F<20;F++){USART1->DR=data; data++;while((USART1->SR&1<<6)==0);//USART_SR的TC置一,表示发送数据完成;否则没有完成;}return 0;}void RCC_Configuration(void)//系统时钟设置,应用库函数编程过程{//----------使用外部RC晶振-----------RCC_DeInit();//初始化为缺省值RCC_HSEConfig(RCC_HSE_ON);//使能外部的高速时钟 while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待外部高速时钟使能就绪//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//Enable Prefetch Buffer//FLASH_SetLatency(FLASH_Latency_2);//Flash 2 wait stateRCC_HCLKConfig(RCC_SYSCLK_Div1);//HCLK = SYSCLKRCC_PCLK2Config(RCC_HCLK_Div1);//PCLK2 = HCLKRCC_PCLK1Config(RCC_HCLK_Div2);//PCLK1 = HCLK/2RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//PLLCLK = 8MHZ * 9 =72MHZ,系统给外设的时钟fpclkxRCC_PLLCmd(ENABLE);//Enable PLLCLKwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//Wait till PLLCLK is ready RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//Select PLL as system clockwhile(RCC_GetSYSCLKSource()!=0x08);//Wait till PLL is used as system clock source//---------打开相应外设时钟--------------------RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能APB2外设的GPIOA的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能APB2外设的GPIOC的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); }void GPIO_Configuration(void)//复用引脚设置{ GPIO_InitTypeDef GPIO_InitStructure; /* Configure USARTx_Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//复用上拉 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USARTx_Rx as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//浮空输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);}
0 0
- STM32 USART寄存器方式编程
- STM32 学习七 USART通信2 寄存器方式编程
- STM32 -USART中断方式
- STM32 -USART中断方式
- STM32 学习八 USART通信3 库函数方式编程
- stm32 USART 串口通信[操作寄存器+库函数]
- stm32 USART 串口通信[操作寄存器+库函数]
- stm32 USART 串口通信[操作寄存器+库函数]
- STM32寄存器编程思路
- STM32学习之:USART中断方式
- STM32 C++编程 003 USART(串口)类
- STM32 USART
- STM32 USART
- STM32-USART
- STM32寄存器方式流水灯
- CC2530 USART 寄存器
- STM32寄存器操作方式学习-时钟配置
- STM32寄存器操作方式学习-GPIO
- codeforces733E LCA在线
- 单例模式的几种实现方式比较
- 实现Android5.0过渡动画兼容库
- Nov week1
- PMP学习笔记之第四章 项目整合管理
- STM32 USART寄存器方式编程
- ⑦基于时间型SQL盲注
- 【Codeforces 733F】 Drivers Dissatisfaction 【MST+bianry lifting】
- 关于Flux的学习
- jsp自定义标签
- 10种简单的Java性能优化
- 舒尔特表的生成算法
- 【USACO】2016 Open 262144
- MFC中CheckBox的状态判断