USARTx->DR = (Data & (uint16_t)0x01FF);

stm32上USARTx->DR = Data不是就可以了吗,为什么还要加& (uint16_t)0x01FF
ps:data是变量

STM32中DR寄存器只有低9位(8:0)有效,其余高位是保留的。所以在进行寄存器赋值时,为了保证正确性和将来的兼容性,只取Data的低9位数据。所以出现了USARTx->DR = (Data & (uint16_t)0x01FF);这样的语句,假设不小心Data高位有值也能保证寄存器正确赋值。
温馨提示:内容为网友见解,仅供参考
无其他回答

USARTx->DR = (Data & (uint16_t)0x01FF);
STM32中DR寄存器只有低9位(8:0)有效,其余高位是保留的。所以在进行寄存器赋值时,为了保证正确性和将来的兼容性,只取Data的低9位数据。所以出现了USARTx->DR = (Data & (uint16_t)0x01FF);这样的语句,假设不小心Data高位有值也能保证寄存器正确赋值。

...PeripheralBaseAddr = (uint32_t)&USART1->DR;
楼主 我感觉 第一个 USARTx->DR = (Data & (uint16_t)0x01FF);和 return (uint16_t)(USARTx->DR & (uint16_t)0x01FF) 你上面 说了 是 给数据 给 寄存器 下面 的 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR; 是取寄存器的地址 我就说个 ...

android中的一段代码,求解 Sex = (byte) ((Sex & 0xff) & 0x01...
0xff 代表一个有十六位且每一位都是1的二进制数;0x01 代表一个有十六位且最低位是1其他位都是0的二进制数;然后,Sex 分别与 它们进行位“与”

求大神解释i2c_write( NVP6114+i, 0xFF, 0x01);括号里的参数是什么意思...
第一个应该是设备地址,第二个是寄存器地址,第三个是要往寄存器写的数据

"LEFT--left",for(i=line-1;i>save_y 1;i--)
flag_pos=0;logo(x 14,y 51,t3,COPY_PUT);对比0x003f,0x00ff,0x01ff,0x10ff,for(i=line-1;i>save_y 1;i--)983

...ISP程序中ISP_ADDRL=(unsigned char)(byte_addr&0 怎么理解
byte_addr&0x00ff: 将 16位的byte_addr的低8位取出放在一个8位的ISP_ADDRL变量中 与0x00ff相与表示舍弃高8位,只要低8位。iSectorAddr=sector_addr&0xfe00; \/\/取扇区地址 这条语句中的0xfe00 应该与你所用单片机的扇区地址定义有关,你查下Datasheet 就知道了。希望能帮到你。

if(num!=0xff)这个语句有什么作用?为什么要判断键值不等于0xff,我...
表示有按键按下 看keypro中的default:return 0xff;break;

void mian() { int i; P0=0xff; P1=0x01; i=1; while(i) { led1=1...
void mian(){ int i;P0=0xff;P1=0x01;i=1;while(i){ led1=1;if(!key1){ i--; } } } 从你编写的这个程序来看,不知道你按下键后有什么动作?目的何在,单独就只是i--那就是按下键跳出while循环而已,没有发现跳出后有什么其他动作 ...

利用AT89C51单片机设计简易电子钟(六位),通过8位LED数码管实现时间显示...
DDRD=0XFF; \/\/端口D低4位为输出 PORTD=0X0F;} void delay(uint j) \/\/延时函数 {uint k;while(j--){for(k=1000;k>0;k--) ;} } void display(uchar *p) \/\/显示函数 {uchar i,sel=0x01;for(i=0;i<4;i++){PORTA=sel; \/\/选通最右边的数码管 PORTB=table[p[i]...

c51单片机c语言交通灯的程序
程序如下:include <reg51.h> define uchar unsigned char define uint unsigned int uchar data buf[4];uchar data sec_dx=20;\/\/东西数默认 uchar data sec_nb=30;\/\/南北默认值 uchar data set_timedx=20;uchar data set_timenb=30;int n;uchar data b;\/\/定时器中断次数 sbit k1=P1...

相似回答