STM32单片机地址映射

以USART1为例,解释

 

 

//以STM32F429IGT6为例

/** @addtogroup Peripheral_memory_map
  * @{
  */
#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region

/*!< Peripheral memory map */
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x00010000)

/*!< APB2 peripherals */
#define USART1_BASE           (APB2PERIPH_BASE + 0x1000)

/** @addtogroup Peripheral_declaration
  * @{
  */  
#define USART1              ((USART_TypeDef *) USART1_BASE)//将USART1_BASE强转为指向USART_TypeDef类型的指针
							//开辟一个以0x40000000+0x00010000+ 0x1000为地址的结构体指针


/** 
  * @brief Universal Synchronous Asynchronous Receiver Transmitter
  */
 
typedef struct
{
	__IO uint32_t SR;         /*!< USART Status register,                   Address offset: 0x00 */
	__IO uint32_t DR;         /*!< USART Data register,                     Address offset: 0x04 */
	__IO uint32_t BRR;        /*!< USART Baud rate register,                Address offset: 0x08 */
	__IO uint32_t CR1;        /*!< USART Control register 1,                Address offset: 0x0C */
	__IO uint32_t CR2;        /*!< USART Control register 2,                Address offset: 0x10 */
	__IO uint32_t CR3;        /*!< USART Control register 3,                Address offset: 0x14 */
	__IO uint32_t GTPR;       /*!< USART Guard time and prescaler register, Address offset: 0x18 */
} USART_TypeDef;

//初始化IO 串口1 
//bound:波特率
void uart_init(u32 bound)
{	
	//UART 初始化设置
	UART1_Handler.Instance=USART1;					    //USART1    
	UART1_Handler.Init.BaudRate=bound;				    //波特率
	UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
	UART1_Handler.Init.StopBits=UART_STOPBITS_1;	    //一个停止位
	UART1_Handler.Init.Parity=UART_PARITY_NONE;		    //无奇偶校验位
	UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
	UART1_Handler.Init.Mode=UART_MODE_TX_RX;		    //收发模式
	HAL_UART_Init(&UART1_Handler);					    //HAL_UART_Init()会使能UART1
}

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用STM32单片机实现OLED显示心率脉冲波形,首先需要连接OLED显示屏和STM32单片机。接下来,需要连接心率传感器到STM32单片机。接收到心率传感器的数据后,STM32单片机可以通过ADC或者I2C等接口读取传感器的模拟信号。 在代码的实现上,首先需要配置相应的引脚作为ADC输入,并初始化ADC模块。然后,开始连续采样脉冲信号,并将数字化的数据存储到缓存中。同时,也可以根据采样频率自定义一定的时间窗口大小。 接下来,利用I2C总线通信协议将采样到的数据传输到OLED显示屏。STM32单片机需要配置I2C模块,初始化OLED屏幕,并设置相应的显示模式。然后,通过I2C总线将数据传送给OLED屏幕。 为了能够在OLED屏幕上显示波形信息,我们可以利用屏幕上的像素点进行绘制。可以根据采样到的数据计算波形在屏幕上的位置。例如,可以通过映射函数将采样的数据映射为屏幕上的纵坐标,并在对应坐标点上绘制像素点。通过定时刷新,不断更新显示屏上的波形图,从而实现实时显示心率脉冲波形。 最后,为了提高代码的可读性和可维护性,可以将相关的代码功能划分为不同的函数或模块。同时,为了保证心率波形的准确性,还可以考虑添加滤波算法对采样数据进行平滑处理。 综上所述,使用STM32单片机实现OLED显示心率脉冲波形需要进行硬件连接和软件实现。在代码设计上需要进行ADC模块的配置和初始化、I2C通信协议的设置以及屏幕上波形的绘制。通过以上步骤的实现,即可在OLED屏幕上实时显示心率脉冲波形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值