历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2018年08月26日 | STM32 USART寄存器方式编程

2018-08-26 来源:eefocus


#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);//首先设置系统时钟为8MHZ

void GPIO_Configuration(void);

void delay1ms(u16 t){

    u16 i,j;

  for(i=0;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;//设定波特率值是9600

DIV=(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 state

RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK

RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 =  HCLK

RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ,系统给外设的时钟fpclkx

RCC_PLLCmd(ENABLE); //Enable PLLCLK

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock

while(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);

}


推荐阅读

史海拾趣

ENOCEAN公司的发展小趣事

作为一家以技术创新为核心竞争力的公司,EnOcean始终致力于研发更先进、更高效的无线无源传输技术。通过不断投入研发资源,EnOcean在能量转换效率、数据传输速率等方面取得了显著进展。同时,公司还积极探索新的应用领域和市场机会,以保持其在电子行业中的领先地位。

以上五个故事概述了EnOcean公司在电子行业中发展的主要历程和关键事件。通过这些故事,我们可以看到EnOcean凭借其在无线无源传输技术方面的持续创新和卓越性能,成功在全球市场上赢得了广泛认可和应用。

Advanced Fibreoptic Engineering Ltd公司的发展小趣事

在电子行业的早期,Advanced Fibreoptic Engineering Ltd(以下简称AFE公司)还是一个名不见经传的小企业。然而,随着技术的不断进步,AFE公司凭借其在光纤技术领域的深厚积累,成功研发出了一种具有划时代意义的新型光纤材料。这种材料不仅传输速度快,而且损耗极低,极大地提高了数据传输的效率和质量。这一技术突破迅速为AFE公司赢得了市场认可,公司的订单量激增,业绩逐年攀升。

随着技术的推广和应用,AFE公司的光纤产品逐渐在通信、医疗、工业等多个领域得到广泛应用。公司不仅在国内市场占据了一席之地,还积极拓展海外市场,与国际知名企业建立了稳定的合作关系。凭借卓越的产品性能和良好的市场口碑,AFE公司逐渐在电子行业中崭露头角,成为了光纤技术领域的佼佼者。

以上是第一个故事的示例,若您想要探索更多关于AFE公司的发展故事,请输入继续。

(注:由于我无法实时获取具体公司的实际发展故事,以上故事为虚构内容,仅用于展示故事编写风格和结构。如果您需要真实、具体的故事,请提供更多关于AFE公司的信息,以便我能为您编写更贴近实际的内容。)

GISMA Steckverbinder GmbH公司的发展小趣事

随着全球电子市场的不断扩大,GISMA积极实施国际化战略,努力拓展海外市场。公司不仅在欧洲市场建立了稳固的地位,还逐步将业务拓展到亚洲、北美等地区。通过参加国际展会、建立海外销售网络等方式,GISMA成功吸引了众多国际客户的关注,进一步提升了品牌知名度和市场占有率。同时,GISMA还积极寻求与国际知名企业的合作机会,共同推动电子行业的发展。

Flamar公司的发展小趣事

随着电子行业的全球化趋势日益明显,Flamar公司积极实施国际化战略,通过设立海外研发中心、生产基地和销售网络,不断拓展全球市场。公司先后在欧洲、亚洲等地建立分支机构,与当地企业建立紧密的合作关系,共同推动电子技术的创新与应用。通过国际市场的开拓,Flamar公司不仅实现了业务规模的快速增长,还进一步提升了品牌的国际知名度和影响力。

Deutron Electronics Corp公司的发展小趣事

为了进一步提升竞争力,Deutron Electronics Corp积极寻求国际合作与并购机会。公司与多家国际知名电子企业建立了战略合作关系,共同研发新产品和技术。同时,公司还成功收购了几家具有核心技术的电子企业,增强了自身的研发和生产能力。这些合作与并购为Deutron Electronics Corp带来了更多的发展机遇和市场空间。

American Micro Products Inc公司的发展小趣事

为了保持技术的领先地位,AMP高度重视研发团队的建设和人才培养。公司投入大量资源用于引进和培养高端人才,为研发团队提供了一流的工作环境和研发设备。这些人才为AMP的技术创新和产品升级提供了强有力的支持。

问答坊 | AI 解惑

移动资费下调是否为3G前夜的暗战

  坚冰的融化往往意味着春天的到来。然而,冰冻时间长达十年之久的北京移动资费的下调,又将意味着什么呢?   “此次运营商资费下调的真实目的是在为3G做准备。”计世资讯资深分析师郭海涛表示。   易观国际的邱林也认为,此次以套餐形式出现 ...…

查看全部问答>

原理图中的BUS总线问题?

为什么我原理图中的BUS总线显示连接上了,ERC检查也没错,导入到PCB中就没有连上呢,部分原理图如下,谢谢高手指导! [ 本帖最后由 zhouyueping1986 于 2008-6-16 16:03 编辑 ]…

查看全部问答>

诚聘兼职PROE、Mentor二次开发

兼职PROE、Mentor要求: 1、熟练使用PROE、Mentor软件; 2、1年以上PROE、Mentor二次开发的经验;? 3、熟悉使用关系型数据库(SQL)基本功能; 4、有相关成果或演示产品。 5、业余时间丰富。 联系人:北京神舟软件有限公司 胡炎平  1 ...…

查看全部问答>

据说带上这个头罩可以进步办公效率

这是设计师专门为意大利米兰一家公司员工设计的办公专用头罩,它的作用就是在一些开放式办公环境里,戴上它,员工们可以把自己的注意力集中在一点,从而盼望能进步大家的办公效率。 头罩设计了15款,比较好笑的是,有些头罩戴着让人感到样子象一个 ...…

查看全部问答>

请问谁用过AVR写过18B20的驱动啊?

本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata     大家上午好,请问有谁用过AVR的单片机写过18B20的驱动啊 …

查看全部问答>

推荐一个学习嵌入式的培训和书籍

中心简介:   广东省嵌入式软件公共技术中心(简称GEC)是广东美的集团嵌入式产品研发中心,原是广东省政府公开向社会竞标的项目,由广东美的集团中标承建。中心建设资金总投入3000万元,其中省政府资助资金900万元、地方政府配套450万元、美的 ...…

查看全部问答>

紧急求助:USB设备移除后再插上,无法激活!

紧急求助:USB设备移除后再插上,无法激活! 2、我插上设备,在弹出的提示框中输入驱动程序名称后,能正确安装、调用USBDeviceAttach函数初始化设备了,我在应用程序中用CreateFil e和DeviceIOControl函数可以访问了,但是当我拔出设备第二次插进 ...…

查看全部问答>

【购笔记本】请推荐一款5000元左右,最好是4500至500元的性价比比较高的笔记本。

请推荐一款5000元左右,最好是4500至500元的性价比比较高的笔记本。 …

查看全部问答>

怎样启动SOPC 板极描述?

我的SOPC FILE菜单中怎么没有 New Board Discription选项,用来创建一个新的班机描述呢?我的软件版本太低吗?用的QUARTUS5。0…

查看全部问答>