1、设置pwm dma配置
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t buffer[10];
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
for(int i = 0;i<10;i++)
{
buffer[i] = 20 + i*5;
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, (uint32_t *)&buffer,10);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
示波器波形如图:
不过我数组定义的是 uint16_t buffer[10];
数组初始化累加
for(int i = 0;i<10;i++)
{
buffer[i] = 20 + i*5;
}
数据发送是
HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, (uint32_t *)&buffer,10);
按照道理 是10个方波 周期是 800k 【mcu 主频64M】
10个占空比依次增大。但是上图的现象不是这样的。
本着求知的心态,希望找出问题
首先 我们设置了uint16 的数组,也设置了dma 半字的传输方式,按理来说应该是正常的输出波形
难道是HAL_TIM_PWM_Start_DMA 这个 (uint32_t *) 字符指针?我修改成 void * 波形也没有变化,我查了网上的资料,这个可以不用管。
主要是dma传输 设置 和数组定义。
后面在网上找到问题的解决方法。
for(int i = 0;i<10;i++)
{
buffer[i] = 20 + i*5;
}
buffer[9] = 0;
定义的传输数组的最后一个数组,设置为零,这样传输数据就可以正常现象了。
【比如需要10个字符,可以定义11个,最后一个设置为0就好了】